首先你需要了解什么是继承、抽象类、接口
类转型(向上转型)
Java的变量可以相互转型,如:
int a
= (int) 3.5;
Java的类也可以相互转型 Java的类转型只限制于有继承关系的类 子类可以转换为父类(向上转型),但父类不能转换为子类(父类转子类只有一种情况例外,就是这个父类本身就是从子类转换过来的)
Human obj1
= new Man();
Man obj2
= new Human();
父类转子类的一种特殊情况
Human obj1
= new Man();
Man obj2
= (Man
) obj1
;
类型转换带来的作用就是多态
多态
重写
子类可以重新定义一个名字,参数和父类一样的方法,这种行为就是重写(overwrite),区别于重载(overload)。
子类的方法优先级高于父类
多态的作用
以统一的接口来操纵某一类中不同对象的动态行为
public class Human {
int height
;
int weight
;
public void eat() {
System
.out
.println("I can eat!");
}
}
public class Man extends Human {
public void eat() {
System
.out
.println("I can eat more");
}
public void plough() { }
public static void main(String
[] a
) {
Man obj1
= new Man();
obj1
.eat();
Human obj2
= (Human
) obj1
;
obj2
.eat();
Man obj3
= (Man
) obj2
;
obj3
.eat();
}
}
obj1 obj2 obj3的eat()方法引用的都是Man的eat方法。 即使一个子类被强制转换成了它的父类,但其对象的地址仍是子类的地址,只是无法调用子类自己定义的方法。例如obj2的地址和obj1是同一个地址,只是obj2对象被屏蔽了plough()方法
对象之间的解耦
契约思想
设计思想:基于接口,利用转型和多态,不影响真正方法的调用,成功将调用类和被调用类解耦
类不会直接使用另一个类,而是采用接口的形式,外部可以直接"空投"这个接口的任意子类对象。
public interface Animal {
public void eat();
public void move();
}
public class AnimalTest {
public static void haveLunch(Animal a
) {
a
.eat();
}
public static void main(String
[] args
) {
Animal
[] as
= new Animal[4];
as
[0] = new Cat();
as
[1] = new Dog();
as
[2] = new Cat();
as
[3] = new Dog();
for(int i
=0;i
<as
.length
;i
++) {
haveLunch(as
[i
]);
}
haveLunch(new Cat());
haveLunch(new Dog());
}
}
Java包和思维导图:链接:https://pan.baidu.com/s/1wBwbuI-hXaEneNq_LcY9bg 提取码:brxk