------- android培训、java培训、期待与您交流! --------------------------------
1. 继承的由来
在编程中,子类继承父类以后,获得父类的成员,但不是全部的。
继承怎么来的?
父类是将多个类中的共性抽取出来,目的是提高代码的重用性。
继承的好处:
代码少了,write less do more
继承出现后,类与类之间,产生了关系,正是因为有了这个关系
,导致了面向对象的第三大特征多态
应用:
子类父类使用过程中,子类自己有,用自己的,子类没有用父类的
,找爷爷类,实在没有直接编译失败
2. 单继承
Java语言中,继承只支持单继承
一个类,只能继承一个类,不能同时继承多个类
一个类只能拥有一个父类,但是可以拥有多个子类
但是,虽然不支持多继承,支持多层继承
3. 继承后,子类,父类,成员变量的特点
super :
super代表父类的内存空间的标识。
是父类对象的引用。
用法,super.的方式,调用父类成员,不是全部
子类和父类成员变量的内存图中
记住:父类的成员变量,会跟随子类对象,进入堆内存,标记一个
super
局部变量,只要方法进栈,就存在!
4. 继承后,子类父类,成员方法特点,非常重要的环节
当子类,父类出现了一模一样的方法时,现象称为子类重写父
类的方法
(重写,叫覆盖,复写 override)
5. 继承和重写方法的案例,重点案例
要求,设计一个移动电话 ,接,打
打,拨号
接,来电显示,显示对方的号码
分析具体的事务,只有一个,移动电话,对象,对象中有什么功能
接,打
需求,移动电话,随着技术的革新,接,打,功能发生了变化
打,拨号
接电话:不但有铃声,有号码,大头像,和弦铃声
功能发生了变化,解决办法
第一个办法,修改原始代码,影响原有手机的使用,最要命的问题
记住:以后开发中,修改源代码,是一个灾难性的工程
修改源码,代码是自己写的,别人写的
第二个办法:分析后,发现打电话功能,没有变化,目前只是接发生
了变化
做一个新的手机出来,沿袭原有的功能,并扩展自己的功能,源代码
,不动!!
不会动源码,同时,保证原有的移动电话使用不受影响 继承,覆盖
方法
需求,移动电话,技术变了,智能手机,接,打
附加功能接电话:显示号码归属地
//设计一个移动电话 ,接,打
//打,拨号
//接,来电显示,显示对方的号码
class Phone{
public void call(){
System.out.println("拨号,打电话");
}
public void receive(){
System.out.println("显示号码");
System.out.println("接电话");
}
}
// 需求,移动电话,随着技术的革新,接,打,功能发生了变化
// 打,拨号
// 接电话:不但有铃声,有号码,大头像,和弦铃声
class Phone1 extends Phone{
public void call(){
super.call();
}
public void receive(){
super.receive();
System.out.println("显示大头像");
System.out.println("和弦铃声");
}
}
// 其他功能不变,接电话时显示归属地
class Phone2 extends Phone1{
public void call(){
super.call();
}
public void receive(){
super.receive();
System.out.println("显示归属地");
}
}
class PhoneExtends{
public static void main(String[] args){
Phone p = new Phone();
p.call();
p.receive();
System.out.println("============================");
Phone p1 = new Phone1();
p1.call();
p1.receive();
System.out.println("============================");
Phone p2 = new Phone2();
p2.call();
p2.receive();
}
}
以上的案例,充分利用了继承,覆盖方法的特点,实现程序的无限扩
展性
以后如果遇到类似开发,首先想到继承,覆盖方法,目前只能改
6. 继承后构造方法特点
每一个类,都有自己的构造方法
出现了子类,父类后,构造方法有什么变化
创建子类对象的时候,父类构造方法也运行
7.子类父类中构造方法的总结
A .子类中所有的构造,无论重载几个,每一个的第一行默认super
(),访问父类空参数的构造方法
B .如果父类,没有空参数的构造方法,子类的构造方法,没有写
super(),直接编译失败
C .如果父类,有多个重载构造方法,子类的构造方法,只要访问其
中一个即可
D .子类中,所有的构造方法,不管直接,还是间接,必须访问父类
构造方法
ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com