提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
@[TOC]JAVA中抽象类和方法的重写
前言
1、用abstract
关键字来定义的类叫抽象类,abstract
关键字定义的方法叫抽象方法,抽象方法在的类一定要定义为抽象类,而且抽象类必须被继承,这样才能实现对抽象方法的重写。
2、抽象类不能被实例化,只需声明,不用实现。
3、方法的重写:条件一
两个类必须有继承关系条件二
重写后的方法必须和父类的方法具有:
(1)相同的返回值类型
(2)相同的方法名
(3)相同的形参列表,也就是参数个数和类型都一致条件三
重写的方法的访问权限不能更低
一、定义抽象类
public abstract class Person {
/*注意:抽象类中的抽象方法没有大括号*/
public abstract void show(String name,int age);
}
二、定义实现类(也就是子类)
// Student类继承了Person类
public class Student {
// 重写了Person类中的show方法,方法名相同,返回值相同,形参列表相同
public void show(String name,int age) {
System.out.println(name+age);
}
}
三、访问修饰符
重写的方法的访问权限不能更低
的意思是因为子类是从父类那里继承来的,子类意义上可以替换父类能出现的地方,并且不影响代码的运行,如果子类重写的方法访问权限低于父类的方法,那么会导致在某一些地方不能实现该方法,例如:父类的抽象方法访问修饰符是public
,而子类的重写方法的访问修饰符是private
,子类的方法只能在本类中使用,不能在其他类或者包外使用,而父类的方法却是公开的,可以在任何地方访问,这就违反了“子类可以替换父类能出现的地方”。
(按自己的理解啰里啰唆讲了这么多,不晓得有没有表达清楚,哈哈哈。参考的里氏代换原则
,如果有错误的,请各位大佬指正,谢谢谢谢)
Java常用的四种访问修饰符权限:public
>protected
>default
(默认)>private
public abstract class Person {
//父类的抽象方法设了protected访问修饰符
protected abstract void show(String name,int age);
}
总结
(1)抽象类是出于定义的时候不知道这个类具体的工作或者业务,只知道这个类大概用来干什么的。
(2)抽象类中可以没有抽象方法,编译器也不报错,当然如果不放抽象方法,定义抽象类意义也不大。