封装、继承、多态
...大约 3 分钟Java基础
封装(Encapsulation):
封装是将数据和方法包装在一个单元内的概念。通过使用访问修饰符(public、private、protected等),可以限制对类内部的访问,仅提供对外部的有限接口。你只需要调用类或者说库中的某个方法,传入正确的参数,即可让方法运行,达到你想要的结果,至于方法内部进行了怎样的操作,你不知道,也无需知道,这就是封装。
有啥好处呢:
- 数据隐藏:内部数据设为私有(private),防止外部直接访问和修改,从而保护数据的完整性和安全性。
- 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.对象多态:子类对象可以与父类对象进行转换,而且根据其使用的子类不同完成的功能也不同(重写父类的方法)。