一.认识多态
Test.java
package Test;
public class Test {
public static void main(String[] args) {
Animal a=new Dog();
a.run();
System.out.println(a.name);
Animal a2=new Tortois();
a2.run();
System.out.println(a2.name);
}
}
Animal.java
package Test;
public abstract class Animal {
public String name="父类动物";
public abstract void run();
}
Dog.java
package Test;
public class Dog extends Animal {
@Override
public void run(){
System.out.println("狗跑的贼快");
}
}
Tortois.java
package Test;
public class Tortois extends Animal{
public String name="子类乌龟";
@Override
public void run(){
System.out.println("乌龟根本跑不了");
}
}
二.多态的缺点
Test.java
package Test2.Test;
public class Test {
public static void main(String[] args) {
Animal a=new Tortois();
go(a);
Animal a2=new Dog();
go(a2);
}
private static void go(Animal a) {
System.out.println("开始...");
a.run();
System.out.println("结束...");
}
}
Animal.java
package Test2.Test;
public abstract class Animal {
public String name="父类动物";
public abstract void run();
}
Dog.java
package Test2.Test;
public class Dog extends Animal {
@Override
public void run(){
System.out.println("狗跑的贼快");
}
public void lookDoor(){
System.out.println("狗能看门..");
}
}
Tortois.java
package Test2.Test;
public class Tortois extends Animal {
public String name="子类乌龟";
@Override
public void run(){
System.out.println("乌龟根本跑不了");
}
}
三.自动类型转换
Test.java
package Test2.Test;
public class Test {
public static void main(String[] args) {
Animal a=new Dog();
a.run();
Animal a2=new Tortois();
a2.run();
Tortois t=(Tortois)a2;
t.layEggs();
System.out.println("--------------------------");
go(new Dog());
go(new Tortois());
}
public static void go(Animal a){
if (a instanceof Tortois){
Tortois t=(Tortois) a;
t.layEggs();
}else if (a instanceof Dog) {
Dog d = new Dog();
d.lookDoor();
}
}
}
Animal.java
package Test2.Test;
public abstract class Animal {
public void run(){
System.out.println("动物可以跑");
}
}
Dog.java
package Test2.Test;
public class Dog extends Animal {
@Override
public void run(){
System.out.println("狗跑的贼快");
}
public void lookDoor(){
System.out.println("狗能看门..");
}
}
Tortois.java
package Test2.Test;
public class Tortois extends Animal {
@Override
public void run(){
System.out.println("乌龟根本跑不了");
}
public void layEggs(){
System.out.println("乌龟在下蛋");
}
}
案例
Test.java
package Test;
public class Test {
public static void main(String[] args) {
Computer c=new Computer("外星人");
c.start();
USB u=new Keyboard("双飞燕");
c.installUSB(u);
System.out.println("----------------");
USB u1=new Mouse("逻辑鼠标");
c.installUSB(u1);
}
}
USB.java
package Test;
public interface USB {
void connect();
void unconnect();
}
Computer.java
package Test;
public class Computer {
private String name;
public Computer(String name) {
this.name = name;
}
public void start(){
System.out.println(name+"开机了");
}
public void installUSB(USB usb){
usb.connect();
if (usb instanceof Keyboard){
Keyboard k=(Keyboard) usb;
k.keyDown();
}else if (usb instanceof Mouse){
Mouse m=(Mouse) usb;
m.dbClick();
}
usb.unconnect();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
KeyBoard.java
package Test;
public class Keyboard implements USB {
private String name;
public Keyboard(String name) {
this.name = name;
}
@Override
public void connect(){
System.out.println(name+"成功连接了电脑");
}
public void keyDown(){
System.out.println(name+"敲击了:来了,老弟,666---没毛病---");
}
@Override
public void unconnect(){
System.out.println("成功从电脑拔出");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Mouse.java
package Test;
public class Mouse implements USB {
private String name;
public Mouse(String name) {
this.name = name;
}
@Override
public void connect(){
System.out.println(name+"成功连接了电脑");
}
public void dbClick(){
System.out.println(name+"双击点亮小红心,一键三连");
}
@Override
public void unconnect(){
System.out.println("成功从电脑拔出");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}