封装、继承、多态

tim-qtp...大约 3 分钟Java基础

封装(Encapsulation):

封装是将数据和方法包装在一个单元内的概念。通过使用访问修饰符(public、private、protected等),可以限制对类内部的访问,仅提供对外部的有限接口。你只需要调用类或者说库中的某个方法,传入正确的参数,即可让方法运行,达到你想要的结果,至于方法内部进行了怎样的操作,你不知道,也无需知道,这就是封装。

有啥好处呢:

  1. 数据隐藏:内部数据设为私有(private),防止外部直接访问和修改,从而保护数据的完整性和安全性。
  2. get,set方法可以实现对成员更精准的控制

继承:

允许新创建的类继承现有类的属性和方法,促进代码重用

子类继承父类后,就拥有父类的非私有的属性和方法

单继承

如下:

单继承:在类层次结构上比较清晰
单继承:在类层次结构上比较清晰
class Animal
{
    public int id;
    public String name;
    public int age;
    public int weight;

    public Animal(int id, String name, int age, int weight) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.weight = weight;
    }
    //这里省略get set方法
    public void sayHello()
    {
        System.out.println("hello");
    }
    public void eat()
    {
        System.out.println("I'm eating");
    }
    public void sing()
    {
        System.out.println("sing");
    }
}

而 Dog,Cat,Chicken 类可以这样设计:

class Dog extends Animal//继承animal
{
    public Dog(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
}
class Cat extends Animal{

    public Cat(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
}
class Chicken extends Animal{

    public Chicken(int id, String name, int age, int weight) {
        super(id, name, age, weight);//调用父类构造方法
    }
    //鸡下蛋
    public void layEggs()
    {
        System.out.println("我是老母鸡下蛋啦,咯哒咯!咯哒咯!");
    }
}

各自的类继承 Animal 后可以直接使用 Animal 类的属性和方法而不需要重复编写,各个类如果有自己的方法也可很容易地拓展。

多继承

一个子类有多个直接的父类。这样做的好处是子类拥有所有父类的特征,子类的丰富度很高,但是缺点就是容易造成混乱。下图为一个混乱的例子。

多继承容易造成混乱
多继承容易造成混乱

Java 虽然不支持多继承,但是 Java 有三种实现多继承效果的方式,分别是内部类、多层继承和实现接口。

implements 关键字

使用 implements 关键字可以变相使 Java 拥有多继承的特性,一个类可以实现多个接口(接口与接口之间用逗号分开)。

interface doA{
     void sayHello();
}
interface doB{
     void eat();
    //以下会报错 接口中的方法不能具体定义只能声明
    //public void eat(){System.out.println("eating");}
}
class Cat2 implements  doA,doB{
    @Override//必须重写接口内的方法
    public void sayHello() {
        System.out.println("hello!");
    }
    @Override
    public void eat() {
        System.out.println("I'm eating");
    }
}
public class test2 {
    public static void main(String[] args) {
        Cat2 cat=new Cat2();
        cat.sayHello();
        cat.eat();
    }
}

Cat 类实现 doA 和 doB 接口的时候,需要实现其声明的方法

多态:

多态是同一个行为具有多个不同表现形式或形态的能力。Java语言中含有方法重载与对象多态两种形式的多态:

  • 1.方法重载:在一个类中,允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。
  • 2.对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。