1.重写(覆盖):子类中出现与父类方法名相同,返回值类型相同,参数列表相同,访问权限大于或等于父类的方法
即:父类的这个同名方法被重写了
目的是,满足不同子类的不同需求
2.区分重载与重写:
重载:同一个类中,方法名相同,但参数列表不同,即为重载,重载与返回值类型,访问修饰符无关
重写是子类和父类之间的同名方法,要求:
方法名相同;
参数列表相同;
返回值类型相同;
访问修饰符不能严于父类
3.继承条件下构造方法的调用规则:
如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其它构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,有没有“super();"语句,效果是一样的;
如果子类的构造方法中通过super显示调用父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法;
如果子类的构造方法中通过this显示调用自身的其他构造方法,则在相应构造方法中应用以上两条规则;
特别注意的是,如果存在多级继承关系。则在创建一个子类对象时,以上规则会多次向高一级父类应用,一直到执行顶级父类Object 类的无参构造方法为止
4.抽象关键字:abstract
abstract 可以修饰类
也可以修饰方法
但不可以修饰属性和构造方法
5.抽象类不可以实例化
抽象方法不可以被调用,且子类必须重写这个方法,否则报错
6.有抽象方法的类必须申明为抽象类
子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类;
7.关键字:final
用final 修饰的类,不能再被继承
用final 修饰的方法不能被子类重写
用final修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次
8.常见错误
a.final修饰引用型变量,变量所指的对象的属性值能否改变
例子:请指出以下代码错误
class Dog
{
String name;
public Dog(String name)
{
this.name=name;
}
}
class Test
{
public static void main(String[]args)
{
final Dog dog=new Dog("狗狗");
dog.name="妹妹";
dog=new Dog("丫丫");
}
}
很多人一看以为 dog.name="妹妹";这行错了
其实dog=new Dog("丫丫");错了
b.abstract 是否可以和private,static,final,共用?
例子:下面选项中关于abstract 的使用正常的是()
A.private abstract void sleep();
B.static abstract void sleep();
c.final abstract void sleep();
D.public abstract void sleep();
A错,抽象方法是让子类重写的,而子类无法继承到private方法,自然不能重写
B错,抽象方法不能实例化,static方法可以通过类名访问,但无法访问一个没有实现的方法
C错,抽象方法是用来重写的,而加了final方法将不能重写,相互矛盾
D对