1.继承的解释:Java语言中继承体现的是一种“is a”的关系,Java仅支持单继承 ,但可以多层继承,即子类继承父类,父类继承祖父类
2.继承的注意事项:
1.子类只能继承父类中非私有的成员变量和成员方法
2.子类不能继承父类的构造方法,但可以通过super关键字去访问父类的构造方法
注意:super的用法和this很像,this代表本类对象的引用,super代表父类存储空间的标识,可以理解为父类引用,可以操作父类的成员
子类中所有的构造方法默认都会先访问父类中无参的构造方法,这是因为子类继承自父类,所以要先初始化父类,这样子类才能用父类中的成员变量,综上,子类的每一个构造方法 第一句肯定是super();调用父类的无参构造方法。如果父类没有无参的构造方法,那么子类的构造方法就会报错,解决办法:
1.加入一个父类的无参构造方法
2.通过使用super关键字去显示的调用父类的带参构造方法,例如父类中没有无参构造方法,但有一个带String name的构造方法:public Person(String name){},此时子类的构造方法第一行可以调用这个父类带参的构造方法:super("张三")。 this(...)和super(...)必须在第一行,避免多次初始化父类。
3.方法重写:子类中出现了和父类中一模一样的方法,包括方法名,参数,返回值类型等都一模一样,
如果子类中的方法和父类中的方法一模一样,就近原则会先使用子类的方法。
4.方法重写的注意事项:父类中的私有方法不能被重写,因为子类无法继承父类的私有方法
子类重写父类中的方法时,访问权限不能更低,,即子类方法的访问修饰符权限必须要大于等于父类的访问修饰符,所以如果父类中的该方法被public修饰,那么子类重写该方法,访问修饰符也必须是public
父类静态方法,子类也必须通过静态方法重写,这与多态相关
5.代码展示:
class Person2{
private int age=10;
String name="张三";
int score=90;
public Person2(){
System.out.println("这是Person2的无参构造方法");
}
public void eat(){
System.out.println("人都要吃饭");
}
public void show(){
System.out.println("人都会思考");
}
static{
System.out.println("静态代码块");
}
private void method(){
System.out.println(age);
System.out.println(name);
}
public void method2(){
System.out.println(age);
System.out.println(name);
}
public void play(){
System.out.println("我是人,我可以玩");
}
private void example(){
System.out.println("我是一个样例");
}
}
class Student extends Person2 {
int score=80;
{
System.out.println("构造代码块");
}
static{
System.out.println("student的静态代码块");
}
public Student(){
System.out.println("我是Student的构造方法");
}
public void method3(){
int score=70;
System.out.println(score);
System.out.println(this.score);
System.out.println(super.score);
}
public void play(){
super.play();
System.out.println("我同时也是一名学生,还需要学习");
}
}
public class ExtendsDemo {
public static void main(String[] args) {
Student s=new Student();//静态代码块 student的静态代码块 这是Person2的无参构造方法 构造代码块 我是Student的构造方法
s.eat();//人都要吃饭
s.show();//人都会思考
//s.method(); 无法访问父类私有的成员方法
//int a=s.age;无法访问父类私有的成员变量
s.method2();//通过父类中的成员方法访问私有成员变量 10 张三
s.method3();//70 80 90
s.play();//我是人,我可以玩 我同时也是一名学生,还需要学习
}
}