目录
封装
封装隐藏了类的内部实现机制,可以不在影响使用的情况下改变了类的内部结构,同时也保护了数据。对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。
属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便地加入逻辑控制,限制对属性的不合理操作
方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用,便于修改,增强代码的可维护性
封装的例子
参考以下链接:
https://blog.csdn.net/qq_53574615/article/details/123448857?spm=1001.2014.3001.5501
封装说明一个类行为和属性与其他类的关系,低耦合,高内聚;
继承
(可以在本部分结尾直接查看相关例子)
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。在本质上是特殊~一般的关系,即常说的is~a关系,子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
从多种实现类中抽象出一个基类,使其具备多种实现类的共同特性,当实现类用extends关键字继承了基类(父类)后,实现类就具备了这些相同的属性。继承的类叫做子类(派生类或者超类),被继承的类叫做父类(或者基类)。
比如从猫类、狗类、虎类中可以抽象出一个动物类,具有和猫、狗、虎类的共同特性(吃、跑、叫等)。
Java通过extends关键字来实现继承,父类中通过private定义的变量和方法不会被继承,不能在子类中直接操作父类通过private定义的变量以及方法。
继承避免了对一般类和特殊类之间共同特征进行的重复描述,通过继承可以清晰地表达每一项共同特征所适应的概念范围,在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。
运用继承原则是的系统模型比较简练也比较清晰
继承的例子
Animal类
package extend;
/**
* @description:
* @author: 解颜
* @date: 2022/3/12 20:45
*/
public class Animal {
public String name;
public String species;
public String bark;
public Animal(){}
public Animal(String name, String species, String bark) {
this.name = name;
this.species = species;
this.bark = bark;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
public String getBark() {
return bark;
}
public void setBark(String bark) {
this.bark = bark;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", species='" + species + '\'' +
", bark='" + bark + '\'' +
'}';
}
}
Cat类
package extend;
/**
* @description:
* @author: 解颜
* @date: 2022/3/12 20:53
*/
public class Cat extends Animal{
private int age;
public Cat(){}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String bark(){
return getName()+ ",今年" + getAge() + "岁,它是属于" + getSpecies()+ "动物的,会"+getBark()+"地叫...";
}
}
Dog类
package extend;
/**
* @description:
* @author: 解颜
* @date: 2022/3/12 20:55
*/
public class Dog extends Animal{
private double weight;
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String bark(){
return getName()+ ",今年重" + getWeight() + "kg,它是属于" + getSpecies()+ "动物的,会"+getBark()+"地叫...";
}
}
测试类
package extend;
/**
* @description:
* @author: 解颜
* @date: 2022/3/12 20:57
*/
public class Test {
public static void main(String[] args) {
//cat
Cat cat = new Cat();
cat.setName("咪咪");
cat.setSpecies("猫类");
cat.setBark("喵喵");
cat.setAge(2);
System.out.println(cat.bark());
//Dog
Dog dog = new Dog();
dog.setName("小黑");
dog.setSpecies("狗类");
dog.setBark("汪汪");
dog.setWeight(2);
System.out.println(dog.bark());
}
}
测试结果
多态
我认为,多态是比较难的一个。封装和继承最后归结于多态,多态指的是类和类的关系,两个类由继承关系,存在有方法的重写,故而可以在调用时有父类引用指向子类对象。多态必备三个要素:继承、重写、父类引用指向子类对象
多态说的是类与类的关系,增加代码的健壮性、可移植性
意义
封装和继承可以增加代码的复用性
多态增加了代码的可移植性、健壮性、灵活性