继承,封装,多态

  • 继承
  • 继承的特点
  • 继承的好处
  • 继承的弊端
  • 继承的注意事项
  • 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)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。(面试易问)

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

封装的优点

  1. 类内部的结构可以自由修改。
  2. 可以对成员变量进行控制。
  3. 能隐藏重要信息。

实现Java封装的步骤

  1. 修改属性的可见性来限制对属性的访问(一般限制为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();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

多态的好处和弊端

多态的好处
提高了代码的维护性(继承保证)
提高了代码的扩展性(由多态保证)–人演奏乐器

多态的弊端
不能使用子类的特有属性和行为。