< 今日心情 >抓紧时间,继续!
一、 概述
当描述的几种不同事物间有共性的属性和行为时,也就是说在不同的类中存在相同意义的变量和方法时,可以将这些共性的内容抽离出来形成一个新的类,使用一种方式让多个类拥有新类的所有内容,这样就不需要在这些类中定义这些共性的内容了。
这种方式就是继承。
新形成的类就是父类,多个类就是子类。
格式
class 类名 extends 父类名
{
}
class Baby { public String name="gou dan"; public char sex='男'; public void speak() { System.out.println("我叫:"+name+",我是一个"+sex+"孩"); } } class Boy extends Baby { public void wuShu() { System.out.println("我有一个双节棍,呼呼哈嘿!"); } } class Girl extends Baby { public void dance() { System.out.println("我是一只小天鹅。"); } } class ExtendsDemo { public static void main(String[] args) { Boy boy=new Boy(); boy.name="蛋蛋"; boy.speak(); boy.wuShu(); Girl girl=new Girl(); girl.name="丫丫"; girl.sex='女'; girl.speak(); girl.dance(); } }
![]()
注:子类只可以继承父类非私有成员
继承的出现提高了代码的复用性。
继承的出现让类与类之间产生了关系,提供了多态的前提。
二、 继承的特点
java只支持单继承,不支持多继承。
也就是说一个类上只能有一个extends + 一个父类名java支持多层继承
子类也可以被其他类继承,也就是说一个类既可以作为子类同时也可以作为一个父类存在
覆盖:
子类中定义与父类相同的成员函数,可以覆盖父类成员函数。
注:
private修饰的函数不能被覆盖。
子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
静态只能覆盖静态。
注意:
不要为了简化功能而去继承,父类和子类之间描述的事物一定要有关系才能继承。
这种关系是子类is a 父类
三、 super关键字
super和this用法相同,意义不同。this代表本类引用,super代表父类引用。
super可以访问被覆盖的父类成员。子类构造函数中要调用父类构造函数是,用super语句,与this用法相同。
子类构造函数中默认有一个super(),当父类没有空构造函数时就需要手动添加了。
也可以手动添加super访问父类非空构造函数。
super要写在第一行。
注:当父类构造函数中已经完成了某些初始化动作,子类可以使用super调用。简化书写,提高代码的复用性。
class Baby { public String name="gou dan"; public char sex='男'; public Baby(String name,char sex) { this.name=name; this.sex=sex; } public void speak() { System.out.println("我叫:"+name+",我是一个"+sex+"孩"); } } class Boy extends Baby { public Boy(String name,char sex) { super(name,sex); } public void wuShu() { System.out.println("我有一个双节棍,呼呼哈嘿!"); } } class Girl extends Baby { public Girl(String name,char sex) { super(name,sex); } public void dance() { System.out.println("我是一只小天鹅。"); } } class ExtendsDemo { public static void main(String[] args) { Boy boy=new Boy("蛋蛋",'男'); //boy.name="蛋蛋"; boy.speak(); boy.wuShu(); Girl girl=new Girl("丫丫",'女'); //girl.name="丫丫"; //girl.sex='女'; girl.speak(); girl.dance(); } }
子类实例化过程:
子类实例化过程中就是在调用构造函数中的super,因为要明确父类中变量的初始化。
四、 final关键字
final修饰符有“终结”的意思。final可以修饰类,函数,变量
被final修饰的类不可以被继承。final类不可以做父类。被final修饰的函数不可以被覆盖。被final修饰的变量只有被定义的时候可以赋值一次。内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。