封装
封装就是隐藏对象的属性和实现细节,暴露出外部访问的接口,控制在程序中属性的读取和修改的访问级别。
通过访问修饰符控制(private、public,protected,default)
private:当前对象方法以及内部类、匿名类访问。
public:所有对象以及包括外部程序访问。
protected:和private一样 ,当前对象方法以及内部类、匿名类访问。不同点就是,通过继承的子类可以访问。
default:如果不写修饰符,就是默认的包级别,当前包里面的类可以访问。
隐藏实现细节,怎么隐藏,天天挂着嘴边的面向接口编程怎么面向接口、什么高内聚、低耦合。
隐藏:通过类包装数据和行为,隐藏的部分一般都是比较脆弱的,需要优化或者重构的,如果暴露出来就会很容易出bug。
我们常见的服务端程序暴露API给客服端,(高内聚,自己能做的事,都自己做)服务端能做的事情自己做,不要把服务端的信息暴露给客服端,如果客服端依赖服务端,服务器端改了,客服端也要做相应的修改。
面向接口编程好处,定义接口规范,不管实现类内部如何重构、优化,只要不改变方法的行为,都不会影响客服端。
继承
is-a 是Ta 、is-like-a 像Ta的区别
说的白话一点就是is-a 就是重写父类的方法,is-like-a 重写父类的方法,并且有自己的方法
is-like-a
public abstract class AbstractBird {
protected String color;
protected String name;
public AbstractBird(String color, String name) {
this.color = color;
this.name = name;
}
public void show() {
System.out.println("看那是" + this.name + ":颜色是" + this.color);
drinking();
goWalk();
sleep();
}
public abstract void goWalk();
public abstract void sleep();
public abstract void drinking();
}
public class Zoo {
private AbstractBird abstractBird;
public Zoo(AbstractBird abstractBird) {
this.abstractBird = abstractBird;
}
public void show() {
//向上转型 is-a
this.abstractBird.drinking();
//向下转型 is-like-a
Magpie magpie = (Magpie) abstractBird;
magpie.singing();
}
}
多态
多态分两种:
(1) 编译时多态(设计时多态):方法重载。
(2) 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们一般说的都是运行时多态,所以多态主要也是指运行时多态)
第一种实现多态,RTTI(Run-Time Type Identification),通过运行时类型信息程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。
第二种就是我们用的发射实现
在古代中国神话传说中,龙生有九子,九子不成龙,各有所好。
money (100元,50元,20元,10元,5元,1元) 每张都形状,图案,大小,颜色都体现不一样。
组合
组合是一种强依赖
例如:房子和卧室,如果房子没有了,卧室也没有了.
class Room{
public Room createRoom(){
return new Room();
}
}
class House{
private Room room;
public House(){
room = new Room();
}
public void createRoom(){
room.createRoom();
}
}
聚合
例如:人拥有电脑,就是一种拥有关系
class Computer{
public void typeWriting(){
System.out.println("打字");
}
}
class Person{
private Computer cp ;
public Person(Computer cp){
this.cp = cp;
}
//用电脑打字
public void play(){
cp.typeWriting();
}
}