一、封装
封装是将对象的属性和方法细节隐藏起来,只对外提供某些接口。封装的主体是类,封装对类提供保护,使类的属性和方法在外部不能随意访问,只能通过类对外提供的接口访问。类是封装的最基本单位。封装防止了程序相互依赖而带来的变动影响。
封装通过合并特征和行为来创建新的数据类型。
个人认为,边数,画画功能,删除功能,shape类这些定义都是数据抽象;把他们组装到一起,然后有些是private私有的属性,有些是public公有的接口(方法),则是封装,让你知道该知道的,不该知道的你也没办法调用到。
/**
* @Description 图形 封装
* @Author rll
* @Date 2021-01-13 8:34
*/
public class Shape {
//边
private int side = 0;
public Shape() {
}
public Shape(int side) {
setSide(side);
}
//周长
public int getPerimeterInt() {
return 0;
}
//周长
public double getPerimeterDouble() {
return 0;
}
public int getSide() {
return side;
}
public void setSide(int side) {
this.side = side;
}
public void draw() {
System.out.println("shape draw");
}
public void delete() {
System.out.println("shape delete");
}
}
二、继承
多个类存在相同属性和方法时,将这些相同内容抽取到单独一个类中,那么这多个类就不用再定义这些相同属性和方法,只要继承单独的那个类即可。子类继承父类(超类)。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。
继承允许将对象视为它自己本身的类型或其基类型(向上转型)来加以处理,而同一份代码也就可以毫无差别的运行在这些不同类型之上了。比如Circle类继承Shape类,继承了public方法(protected的也可以)。
/**
* @Description 圆形 继承
* @Author rll
* @Date 2021-01-13 8:38
*/
public class Circle extends Shape {
private double pi = Math.PI;
public Circle() {
}
public Circle(int side) {
setSide(side);
}
//周长 side当半径
public double getPerimeterDouble() {
return 2 * pi * getSide();
}
@Override
public void draw() {
System.out.println("circle draw");
}
@Override
public void delete() {
super.delete();
}
}
/**
* @Description 三角形 继承
* @Author rll
* @Date 2021-01-21 8:35
*/
public class Triangle extends Shape {
public Triangle() {
}
public Triangle(int side) {
setSide(side);
}
//周长 整型数据
public int getPerimeterInt() {
//假设等边三角形
return this.getSide() * 3;
}
@Override
public void draw() {
System.out.println("triangle draw");
}
@Override
public void delete() {
super.delete();
}
}
三、多态
多态是指允许不同类的对象对同一消息做出响应。
多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开,消除类型之间的耦合关系。
多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一基类导出而来的,这种区别是根据方法行为的不同而表示出来的。
多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术。只有普通的方法调用可以是多态的。任何域(属性/字段)访问操作将由编译器解析,因此不是多态的。
/**
* @Description 多态
* @Author rll
* @Date 2021-01-13 8:48
*/
public class DrawPic {
public static void main(String[] args) {
Shape circle = new Circle(1); //向上转型 半径1
circle.draw();//虽然声明的是shape大类,但是执行的draw方法是circle的
System.out.println(circle.getPerimeterDouble());
Shape triangle = new Triangle(3); //向上转型 边长3
triangle.draw();//虽然声明的是shape大类,但是执行的draw方法是triangle的
System.out.println(triangle.getPerimeterInt());
}
}
四、对象
对象是指客观世界中的任何实体,可以指具体的事物,也可以指抽象的概念。比如,一个人,一条狗,一个计划等。对象的内部状态叫属性,运动规律叫方法或操作。
五、类
类是具有相似内部状态和运动规律的实体的集合。类是具有共同属性和方法的对象的抽象。一个属于某类的对象称为该类的一个实例。
六、抽象
抽象是从具体的实例中抽取共同的性质形成一般的概念。比如,人都有性别,年龄,名字,身高,体重,血型,生日等等,这些可以作为Human这个类下面包含这些属性。
七、消息
消息是指对象间相互联系和相互作用的方式,类似于方法函数调用。