提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:以下是本篇文章正文内容,下面案例可供参考
一、子类能从父类继承哪些东西
--------------私有 ------ 非私有
构造方法:不能-------- 不能
成员变量:能--------------能
成员方法:不能-----------能(在虚方法表中的成员方法都能继承,在成员方法的继承中有解释)
二、构造方法的继承
子类如果继承了父类的构造方法,会导致构造方法的名称与类名不一致,不符合构造方法的规则。
1.定义一个父类,并创建无参构造和带参构造的方法。
public class Person {
int age;
String name;
public Person() {
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
}
2.创建子类,然后创建一个测试类创建子类的对象
public class Student extends Person{
}
public class Test1 {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student(18,"123");
}
}
3.创建s1的对象时没有报错,创建s2的对象时出现报错
如果一个类中没有构造方法,虚拟机会自动生成一个空参构造,所以在用空参的方式创建对象时没有报错。
三、成员变量的继承
1.分别创建子类,父类和测试类
(父类变量为非私有)
public class Fu {
int age;
String name;
}
(父类变量为私有)
public class Fu {
private int age;
private String name;
}
子类
public class Zi extends Fu{
String work;
}
测试类
public class Test {
public static void main(String[] args) {
Zi zi = new Zi();
zi.name="123";
zi.age=11;
zi.work="123";
}
}
2.当父类中的变量为私有时在测试类中调用age和name时会报错
父类中的私有和非私有变量都能继承,在调用时先在右边找对应的变量,再到左边找对应的变量,当变量为非私有时左边的变量不能被找到,会出现报错。
四、成员方法的继承
Java底层会创建一个虚方法表,从最顶级的父类开始,把类中的非private,非static,非final的方法都提取到虚方法表中,子代会继承虚方法表,子代中符合条件的方法也会被提取到虚方法表中,在使用这些方法时只需要创建最底层子类的对象即可。
public class Fu {
private void demo1(){
System.out.println("Demo1");
}
public void demo2(){
System.out.println("Demo2");
}
}
当在测试类中创建子类对象并调用方法时只能调用demo2方法