java面向对象之继承、多态
一、继承
- 继承的概念:
将多个类中的共性内容抽取出来放在一二个独立类中,
同时这多个类和独立的类产生一-种关系. “继承关系” (extends) - 继承的好处:
1)提高代码的复用性
2)提高代码的维护性
3)类与类产生的关系(继承),是多态的前提条件之一! - 继承的特点:
1)在Java中,类与类之间只支持单继承,丕支持多继承!
2)虽然不支持多继承,但是可以支持多层继承!
继承的弊端:类与类之间的继承关系,存在一定的耦合性!
开发的原则:低耦合,高内聚
二、局部变量与static关键字
- 局部变量不用加权限修饰符的,因为局部变量本身就是一个访问限定!因为跟方法有关系、static不能修饰局部变量,局部变量随着方法调用而存在,随着方法调用结束而消失(释放掉),而被static修饰的变量有一个特点:可以被共用,方法调用完里需要程放掉局部变量,这种情况产生冲突.但是可以使用fina1修饰符(状态修饰符),它修饰符的变量在内存中是一个固定的當量(永驻内在的)
三、final关键字的特点
- final :状态修饰符,最终的,无法更改的!
- 修饰类,该类不能被继承! (JDK提 供的8tring类: final class string{})
- 修饰成员变量,该变量此时是一个常量: (传统的自定义常量的格式:public - atatic final 数据类型变量名= 初始化值)
- 修饰成员方法,该方法不能被重写!
四、多态
- 概念:多态指某一个事物,在不同时刻表现出来的不同状态。- 多态前提和体现:有继承关系、有方法重写、有父类引用指向子类对象。
- 多态的成员访问特点:
Fuf=newZi();
1、成员变量:
编译看左边,运行看左边!
(等号左边编译通过,说明Fu类存在这个变量;运行看左,访问的是Fu类的变量)
2、成员方法:
编译看左边,运行看右边!
(等号左边编译通过,说明Fu类存在这个方法;运行看右,子类出现了和父类一模一 样的方法声明:方法重写)
3、静态的成员方法:
编译看左,,运行看左!(静态的算不上方法重写,跟类直接相关,随着类的加载而加载!) - 多态的好处以及多态的整端,如何解决多态的整端:
- 好处: .
1)提高代码的复用性,由继承保证的!
2)提高代码的扩展性,由多态保证! - 整端:
不能访问子类的特有功能
1)创建具体的子类对象子类名对象名= new子类名();这种方式,比较消耗内存空间(在堆内存中开辟新的空间!)
2)使用向下转型:将父类的引用强制转挽子类的引用:
子数名子类对象名 = (子类名)父类的引用;
五、抽象类与接口的区别
-
成员的区别
1)成员变量:
抽象类:既可以定义常量,也可以定义变量
接口:只能是常量,存在默认修饰符:public static final…
2)成员方法:
抽象类:既可以定义抽象方法,也可以定义非抽象方法
接口:只能是抽象方法,存在默认的修饰符:public abstract…
3)构造方法:
抽象类:存在构造方法,无参/有参,对数据进行构造初始化(分层初始化)
接口:没有构造方法 -
关系的区别
1)类与类之间
不管这个类是抽象类还是具体类,都继承关系(extends)
支持单继承,不支持多继承,可以多层继承
2)类与接口之间
实现关系( implements)
一个类继承另一个类的同时可以实现多个接口!
3)接口与接口之间
继承关系( extends)
支持单继承,以及多继承! -
设计理念的区别
1)抽象类,—在抽象类多态中使用:存在继承关系---- >体现的一种"is a"的关系
举例:
父类引用指向子类对象:
Animal a = new Cat() ;
2)接口:体现的–个事物的扩展功能(额外功能),本身不具备的功能
子实现类实现( implements)接口:存在实现关系
体现的是一种"like a" 的关系!
部分猫经过学习—>产生一个"跳高的功能”(跳高猫很像猫)