向上转型、多态、设计思想

首先你需要了解什么是继承、抽象类、接口

类转型(向上转型)

Java的变量可以相互转型,如:

int a = (int) 3.5;

Java的类也可以相互转型
Java的类转型只限制于有继承关系的类
子类可以转换为父类(向上转型),但父类不能转换为子类(父类转子类只有一种情况例外,就是这个父类本身就是从子类转换过来的)

Human obj1 = new Man();//OK,Man extends Human
Man obj2 = new Human();//illegal,Man is derived class Human

父类转子类的一种特殊情况

Human obj1 = new Man();
Man obj2 = (Man) obj1; //OK,因为obj1本身就是Man的对象

类型转换带来的作用就是多态

多态

重写
子类可以重新定义一个名字,参数和父类一样的方法,这种行为就是重写(overwrite),区别于重载(overload)。
子类的方法优先级高于父类
多态的作用
  • 以统一的接口来操纵某一类中不同对象的动态行为
//Human.java
public class Human {
	int height;    
    int weight;
    
    public void eat()  {
    	System.out.println("I can eat!");
    }
}
//Man.java
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();   // call Man.eat()
		Human obj2 =  (Human) obj1;
		obj2.eat();   // call Man.eat()
		Man obj3 = (Man) obj2;
		obj3.eat();	  // call Man.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)	{	//类不直接使用具体的类,而是用Animal接口调用方法
		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()传入数组中某个对象具体的类
		}

		haveLunch(new Cat());  //Animal  a = new Cat();  haveLunch(a);
		haveLunch(new Dog());
		
	}
}

Java包和思维导图:链接:https://pan.baidu.com/s/1wBwbuI-hXaEneNq_LcY9bg
提取码:brxk

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值