Java语法之继承
Java语法之继承
1、格式
public class
子类 extends 父类
public class Dog extendes Animals
2、适用情况
如果有两个类A和B,A是B的一种(所属或共同点较多),更适合用继承。
3、继承中变量的访问特点
//父类
public class FatherDemo {
int age=40; //父类中的age变量
}
//子类
public class SonDemo extends FatherDemo {
int height=175;
int age=20; //子类中的age变量(成员变量)
public void show(){
int age=30; //子类中的age变量(局部变量)
System.out.println(age);
System.out.println(height);
}
}
public class Main {
public static void main(String[] args) {
SonDemo demo=new SonDemo();
demo.show();
}
}
上述例子中,对于age
变量,会先在方法内部找age
变量(即:找局部变量),如果方法内部没有age
变量就去类的成员变量里找,如果仍然没有,最后才回去父类里寻找,如果父类里还是没有,就会报错,不会去父类的父类里去找。
对于上述代码,如果想输出成员变量的age
,则加this
关键字,即:this.age
,如果想输出父类的变量age
,则需要用到super
关键字,即:super.age
。
4、继承中构造方法的访问特点
创建子类对象的时候,会先去访问父类的无参构造方法。因为子类会继承父类中的数据,可能还会使用父类的数据,所以子类初始化之前一定要完成父类数据的初始化。每一个子类构造方法的第一条语句默认都是:super()。
5、继承中成员方法的访问特点
通过子类对象访问方法,会在子类成员范围里找,如果找不到,就去父类,如果再找不到,就会报错,不会去父类的父类去找。
6、方法重写
(1)概述
方法重写:子类出现了和父类中一模一样的方法声明。
应用场景:子类需要父类的功能,而功能主题子类有自己特有内容的时候就可以重写父类中的方法, 这样就沿袭了父类的功能,又定义了子类特有的内容。
(2)举例
比如现在有两个类,Phone类(父)和NewPhone类(子),二者均有打电话的功能,而NewPhone类不仅可以打电话,还可以打电话时开启视频功能,这个场景就可以使用继承。新手机沿用了旧手机的打电话功能,又加入了自己开启视频的特性,这种情况就用到了方法的重写。
//父类
public class Phone {
public void call(String name){
System.out.println("给"+name+"打电话");
}
}
//子类
public class NewPhone extends Phone {
@Override //一个重写的注解,可以用来检查重写方法是否正确
public void call(String name) { //方法的重写
System.out.println("开启视频功能");
super.call(name); //父类的call方法
}
}
public class PhoneDemo {
public static void main(String[] args) {
Phone p=new Phone();
p.call("Lily");
NewPhone np=new NewPhone();
np.call("Mary");
}
}
注意:父类中的私有方法不可以被重写。