继承,封装,多态
- 继承
- 继承的特点
- 继承的好处
- 继承的弊端
- 继承的注意事项
- this和super
- this和super的使用区别
- 封装
- 封装的优点
- 实现Java封装的步骤
- 多态
- 多态前提
- 多态的好处和弊端
继承
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。一个子类继承一个父类。子类就拥用了父类的属性,方法。而final的属性和方法是不能被继承的。
继承的特点
Java只支持单继承,不支持多继承,
即只能继承一个类,格式:extends 类1
有些语言是支持多继承,格式:extends 类1,类2,...
Java支持多层继承(继承体系)
一个类如果没有显示继承,则默认继承Object
继承的好处
提高了代码的复用性
提高了代码的维护性
让类与类之间产生了关系,是多态的前提
继承的弊端
类的耦合性增强了。
开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
继承的注意事项
子类只能继承父类所有非私有的成员(成员方法和成员变量)
子类不能继承父类的构造方法。
子类中所有的构造方法默认都会访问父类中空参数的构造方法
因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。
this和super
在继承中有两个关键字经常被使用,那就是this和super。
this:代表当前对象的引用
super:代表当前对象父类的引用
this和super的使用区别
调用成员变量
this.成员变量 调用本类的成员变量,也可以调用父类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法
this(…) 调用本类的构造方法
super(…) 调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法,也可以调用父类的方法
super.成员方法 调用父类的成员方法
每一个构造方法的第一条语句默认都是:super() Object类最顶层的父类。
特别注意注意:super(…)或者this(….)必须出现在构造方法的第一条语句上
封装
在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。(面试易问)
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。
封装的优点
- 类内部的结构可以自由修改。
- 可以对成员变量进行控制。
- 能隐藏重要信息。
实现Java封装的步骤
- 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class girl {
private String name;
private int age;
public int getAge(){
return age;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public void setName(String name){
this.name = name;
}
}
用私有变量进行封装,用getter和setter方法。进行读取操作。其中 this.name = name;
中第一个this.name是指gil类的实例变量name,等号后面的name则是指 局部变量String name中的name。
在进行赋值的时候可以进行判断,避免恶意赋值。
例如 女孩子的年龄只能小于18岁,那么可以这样设计
public void setAge(int age){
if(age>18){
this.age = 18};
else this.age = age;
}
这样就可以避免有人给年龄恶意赋值。
多态
多态(polymorphic)概述:一种事物的多种表现形态
多态前提
要有继承关系。
要有方法重写。
要有父类引用指向子类对象。
多态有个向下转型的特点
比如:
Parent p = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
多态的好处和弊端
多态的好处
提高了代码的维护性(继承保证)
提高了代码的扩展性(由多态保证)–人演奏乐器
多态的弊端
不能使用子类的特有属性和行为。