概述:
1、多个类相同的属性和功能抽取成另一个类, 让具有特有功能的类继承这个类. 2、通过 extends 关键字可以实现类与类的继承
格式:
class 子类名 extends 父类名 {}
特点 :
1、一个类只能有一个父类,不能有多个父类 2、Java 支持多层继承
package cn.czbk.no5; public class TestExtends { public static void main(String[] args) { C c=new C(); c.ashow(); c.bshow(); A a=new A(); B b=new B(); a.apshow(); System.out.println(b.a); } } class A{ private int a; public void ashow(){ System.out.println("A class"); } private void aprshow(){ System.out.println("A private show不可被外界访问"); } protected void apshow(){ System.out.println("A protected show"); } } class B extends A{ protected String a="protected String"; public void bshow(){ System.out.println("B class"); } } class C extends B{}
继承的注意事项
1、子类只能继承父类所有非私有的成员(成员方法和成员变量)
2、子类不能继承父类的构造方法
3、不要为了部分功能而去继承
package cn.czbk.no5; public class TestExtends1 { public static void main(String[] args) { CC cc=new CC(); } } class AA{ public AA(String a){ System.out.println(a); } } class BB extends AA{ public BB(){ super("abc");//继承AA类的话如果AA有自己定义构造方法的话要在这个地方显示声明 System.out.println("BB cont"); } } class CC extends BB{ public CC(){ //会默认调用父类的空参构造方法 System.out.println("CC cont"); } }
继承中成员变量的关系
this:当前对象的引用
1、this.成员变量
2、this.成员方法(...)
3、this(...)调用自己构造方法
super:当前对象父类对象的引用
1、super.成员变量
2、super.成员方法(...)
3、super(...)调用父类的构造方法
继承中子父类构造方法的关系
1.子类构造默认会访问父类的空参构造, 什么都不写,子类构造默认第一句是 super();
2.如果父类没有空参构造,子类可以显示通过 super(参数列表)语句调用父类带参构造
3.子类构造可以通过 this(..)调用其他构造,让其他构造去访问父类构造.
继承中成员方法关系
同名:子类对象调用的是子类的方法.
方法重写:子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。
重写和重载的区别:
重载的特点:在同一类中。方法名相同,参数列表不同。
重写的特点:要有继承关系。在子父类中方法的声明相同(方法名和参数列表都相同)。覆盖 时,子类方法访问权限不能小于父类方法的访问权限。静态只能覆盖静态。