java学习day011

一.多态

1.1 相关知识

         软件设计六大原则:
        1.单一职责原则 : 一个类或一个方法只做一件事,只拥抱一种变化(只有一个事情的变动会引起变动)
        2.里氏替换原则∶能使用父类的地方就─定可以使用子类
        3.依赖倒置原则 : 底层应该依赖高层,高层不应该依赖底层,实现应该依赖抽象
        4.接口隔离原则 : 应该依赖最小接口
        5.迪米特法则 : 只和有关系的类进行通信
        6.开闭原则 : 扩展开放,修改关闭

1.2 是什么

java中提供了两种多态机制:

1.编译时多态∶是静态的,主要是指方法重载,根据传入不同的参数做出不同的响应
2.运行时多态:是动态的,主要指动态绑定来实现,是我们现在的重点
多态:父类引用指向子类对象 父类引用:就是父类类型创建的引用变量
指向∶就是可以找到谁
子类对象∶子类的实例化对象
通过父类创建的引用类型变量,保存了子类对象的内存地址 父类变量= new子类();

1.3 怎么用

        1.直接多态
        父类 变量名 = new 子类();
        2.形参实参多态
        3.返回值多态

public static void main(String[] args) {
	//父类 变量名 = new 子类();
    Animal a = new Cat();
    //形参实参多态
	m1(new Cat());
}
public static void m1(Animal a ){
}
public static Animal m20{
    //返回值多态
	return new Cat();
}

1.4 应用场景与优点

如果一个功能只对应一种实现,就不使用多态 ​ 如果一个功能可能有多种实现,一定是多态

class User {
	// public void test(Cat cat) {
	// cat.eat();
	// }
	// public void test(Dog dog) {
	// dog.eat();
	// }
	public void test(Animal animal) {
		animal.eat();
	}
}

class Animal {
	public void eat() {
	}
}

// 猫
class Cat extends Animal {
	public void eat() {
		System.out.println("猫吃鱼");
	}
}

// 狗类
class Dog extends Animal {
	public void eat() {
		System.out.println("狗吃肉");
	}
}
class Pig extends Animal {
	public void eat() {
		System.out.println("猪拱白菜");
	}
}

优点 : 降低耦合度,降低需求变动带来的代码变动风险

1.5 缺点

丢失子类特有的属性(父类没有子类有)

1.6 多态进行属性调用

1.父子类都没有 : 报错 ​ 2.父子类都有 : 成员方法执行子类,其他执行父类(父子类都是一个变量a,调用父类的a)(一般是只有方法) ​ 3.父类没有子类有 : 报错,丢失子类特有属性 ​ 4.父类有子类没有 : 父类(父类m1,m2方法,子类只有m1方法)

1.7 Instanceof

多态又叫向上转型 ​ 强制转换会子类类型,又叫向下转型 ​ 必须先发生向上转型,才能发生向下转型

public class Poly_04 {
public static void main(String[] args){
// 多态/向上转型
Animal a = new Cat();
//丢失子类特有属性l
// a.m1();会报错
//强制类型转换为Cat,向下转型
Cat c = (Cat) a;
c.m1();
//java.lang.ClassCastException
Animal a1 = new Animal();
//报错,类型转换异常
// Cat c1 = (Cat)a1;
}

Instanceof:判断该对象是否由某个类实例化而来,可以有效降低向下转型风险

if(a1 instanceof Cat){
	Cat c1 = (Cat)a1;
	System.outprintIn("是cat");
}else{
	System.outprintln("不是cat");}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值