Java继承
使用extends关键字表示继承。
Java只能单继承;
Java可以多层继承;子类可以访问父类的父类的公有成员;
子类不能直接访问父类的私有成员变量,可以通过get\set方法读写;
package com.jike.extendsDemo; class People{ private int age; public void setAge(int age) { this.age=age; } public int getAge() { return age; } } class Worker extends People{ public void tell() { System.out.println(getAge()); } } public class test01 { public static void main(String[] args) { // TODO Auto-generated method stub Worker worker=new Worker(); worker.setAge(20);; worker.tell(); } }
输出:
20
在子类对象实例化之前,必须先调用父类中的构造方法,之后调用子类构造方法。
package com.jike.extendsDemo; class Father{ private int age; private String name; public Father() { System.out.println("父类构造方法"); } } class Son extends Father{ public Son() { System.out.println("子类构造方法"); } } public class test02 { public static void main(String[] args) { // TODO Auto-generated method stub Son son=new Son(); } }
输出:
父类构造方法 子类构造方法
子类中可以重写父类中的方法,重写定义:子类的方法和父类的方法名相同、参数相同、返回值类型相同。
package com.jike.extendsDemo; class A{ public void tell() { System.out.println("我是tell方法"); } } class B extends A{ public void tell() { //重写父类中的方法 System.out.println("重写tell方法"); } } public class test03 { public static void main (String[] args) { B b=new B(); b.tell(); } }
输出:
重写tell方法
并没有执行父类中的tell方法。
使用super关键字可以在子类的方法中执行父类的方法。
super:强行调用父类的方法的执行。
package com.jike.extendsDemo; class A{ public void tell() { System.out.println("我是tell方法"); } } class B extends A{ public void tell() { //重写父类中的方法 super.tell(); System.out.println("重写tell方法"); } } public class test03 { public static void main (String[] args) { B b=new B(); b.tell(); } }
输出:
我是tell方法 重写tell方法
执行了父类中的tell方法。
被子类重写的方法不能拥有比父类方法更加严格的访问权限。(一般父类与子类重写方法的访问权限相同)
三种权限:private<default<public
例如:如果父类的方法是default类型的,那么子类中重写的方法只能是default或者public类型。
重写与重载的区别: