Java基础篇之继承与方法重写
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();//我是人,我可以玩 我同时也是一名学生,还需要学习 } }
浙公网安备 33010602011771号