Java SE05基础复习 继承 接口

3.6继承
单继承:一个子类只能有一个直接父类
多继承:一个子类可以有多个直接父类(Java中不直接支持,因为多个父类中有相同的成员,会产生调用不确定性,改良了c++的多继承,通过“多实现”的方式体现)
多重继承:c继承b,b继承a,就会出现继承体系
当要使用一个继承体系时
a)查看该体系中的顶层类,了解该体系的基本功能
b)创建体系中的最子类对象,完成功能的使用
当类与类之间存在着所属关系的时候,就定义继承
!当本类的成员和局部变量同名用this区分
当子类中的成员变量同名用super区分父类
this:代表本类对象的引用
super:代表一个父类空间
3.6.1覆盖(重写)
当子父类中出现成员函数一模一样的情况,会运行子类的函数
!子类方法覆盖父类方法时,子类权限必须大于等于父类的权限。
静态只能覆盖静态,或者被静态覆盖
当对一个类进行子类的扩展时,子类需要保留父类的父类的功能声明,但是要定义子类中该功能的特有内容,使用覆盖操作完成
3.6.2子类的实例化过程
子类构造对象时,子类构造函数运行时,父类也运行了,因为子类构造函数中第一行有一个默认的隐式语句:super();(调用的是父类中的空参数的构造函数)
子类继承了父类的属性,所以在使用父类内容之前,要先看父类是如何对自己的属性进行初始化的,所以子类构造对象时,必须访问父类中的构造函数。
如果父类没有定义空参数构造函数,子类的构造函数必须使用super明确调用父类中哪一个构造函数(super语句必须要定义在子类构造函数的第一行)
子类构造函数中使用了this调用了本类构造函数时,那么super就没有了,因为super和this都只能定义第一行,所以只能有一个,但能保证的是子类中有其他的构造函数访问父类的构造函数。
通过super初始化父类内容时,子类的成员变量并未显示初始化。等super()父类初始化完,子类成员变量显示初始化。
!一个对象实例化过程
(例:Person p=new Person())
a)JVM会读取指定路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下)
b)在堆内存中开辟空间,分配地址
c)并在对象空间中,对对象中的属性进行默认初始化
d)调用对应的构造函数进行初始化
e)在构造函数中,第一行会先调用父类中构造函数进行初始化
f)父类初始化完毕后,在对子类的属性进行显示初始化
g)再进行子类构造函数的特定初始化
h)初始化完毕后,将地址值赋值给引用变量
3.6.3final关键字
a)可以修饰类,方法,变量
b)final修饰的类不可以被继承
c)final修饰的方法不可以被覆盖
d)final修饰的变量是一个常量,只能赋值一次
3.7抽象类
抽象关键字abstract
特点a)方法只声明不实现,该方法就是抽象方法,需要被abstract修饰,抽象方法必须定义在抽象类中。
b)抽象类不能被实例化,因为调用抽象方法没意义
c)抽象类必须有其子类覆盖了所有的抽象方法后,子类才能实例化,否则子类还是抽象类
!抽象类有构造函数,用于给子类对象进行初始化
抽象类可以不定义抽象方法,目地是不让该类创建对象(AWT的适配对象),通常这个类的方法有方法体,但没有内容
抽象关键字不可以和private,static,final
抽象类和一般类都是来描述事物的,都在内部定义了成员,不同点是抽象类描述事物的信息不足;一般类中不能定义抽象方法,抽象类可以定义;一般类可以被实例化,抽象类不行
抽象类一定是个父类,因为需要子类覆盖其方法才能实例化
3.7接口
当一个抽象类中的方法都是抽象的时候,就可以表示为接口,定义接口时不使用关键字class,使用interface
接口中的成员:(都是公共的权限)
a)全局变量:public static final
b)抽象方法:public abstract

interface Demo
{
	public static final int NUM = 4;
	public abstract void show1();
	public abstract void show2();
}
class DemoImpl implements Demo
{
	public void show1()
	{}
	public void show2()
	{}
}

!类与类之间是继承关系,类与接口是实现关系,接口与接口之间是继承关系,而且接口可以多继承
接口不可以实例化
只能由实现了接口的子类并覆盖了接口中所有的抽象方法,该子类才可以实例化,否则这个子类就是一个抽象类
3.7.1多实现
Java将多继承机制改良为多实现
一个类可以实现多个接口

interface A
{
	public abstract void show();
}
intterface B
{
	public abstract void show();;
}
class c implements A,B//多实现
{
	public void show()
	{}
}

一个类在继承另一个类的同时,还可以实现多个接口
接口的出现避免了单继承的局限性
3.7.2 接口和抽象类的区别
a)抽象类需要被继承,而且只能单继承
接口需要被实现,而且可以多实现
b)抽象类中可以定义抽象方法和非抽象方法,子类继承可以直接使用非抽象方法
接口只能定义抽象方法,必须由子类实现
c)抽象类的继承,是is a关系,定义基本共性内容
接口的实现是 like a 关系,定义额外功能
3.8多态
某一类事物的多种存在形态
多态在代码中的体现:父类或者接口的引用指向其子类的对象
多态的前提:a)必须有关系,继承实现
b)覆盖
多态的转型:(子类对象在做着类型的转换)
向上转型:限制特有功能的访问
向下转型:使用子类中的特有方法
3.8.1类型判断
instanceof 用于判断对象的具体类型(只能用于引用类型的判断)
3.8.1多态时成员
a)成员变量
参考引用类型变量所属类中是否有调用的成员变量(编译和运行都参考“=”左边,Fu f = new Zi();)
b)成员函数(非静态)
编译时,参考引用类型变量所属类中是否有调用的成员函数
运行时,参考的是对象所属的类中是否有调用的函数
c)静态函数
参考引用类型变量所属类中是否有调用的静态方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值