Java学习第十一课

一 多态

  1 相关知识

 2 是什么 

   3 缺点

 4 怎么用 

  5 优点 

package day_04._01_Polymorphic;

/**

 * 多态好处

 *

 * 简单来说 : 高内聚,低耦合

 *

 * @author 天亮教育-帅气多汁你泽哥

 * @Date 2021年10月14日 上午10:51:06

 */

public class Poly_02 {

public static void main(String[] args) {

Cat_01 c = new Cat_01();

eat(c);

Dog_01 d = new Dog_01();

eat(d);

Pig p = new Pig();

eat(p);

}

// 需求 : 要求能够接收所有的动物对象,并调用对象的eat方法

// 这种写法,后续想要养别的宠物,这里源码需要改动

// public static void eat(Cat_01 c) {

// c.eat();

// }

// public static void eat(Dog_01 d) {

// d.eat();

// }

// 多态写法,只要是动物的子类,都可以接收,所以后续想养其他宠物,这里也不需要更改代码,拥抱多种变化

public static void eat(Animal_01 a) {

a.eat();

}

}

class Animal_01 {

public void eat() {

System.out.println("动物吃东西");

}

}

class Cat_01 extends Animal_01 {

public void eat() {

System.out.println("猫吃鱼");

}

}

class Dog_01 extends Animal_01 {

public void eat() {

System.out.println("狗吃肉");

}

}

class Pig extends Animal_01 {

@Override

public void eat() {

System.out.println("吃白菜");

}

}

 6 隐秘多态

package day_04._01_Polymorphic;

/**

 * 比较隐秘的多态

 *

 * 总结 : 通过子类,调用了父类的方法的时候,父类的这个方法的上下文环境,就是多态环境(属于父类空间,子类对象)

 *

 * @author 天亮教育-帅气多汁你泽哥

 * @Date 2021年10月14日 上午11:04:10

 */

public class Poly_04 {

public static void main(String[] args) {

Sup sup = new Sub();

// 2

System.out.println(sup.i);

// 子类

sup.m2();

Sub sub = new Sub();

// 3

// System.out.println(sub.i);

// 子类

// sub.m2();

sub.m1();

}

}

class Sup {

int i = 2;

public void m1() {

// this : 保存当前类对象的内存地址

//  当前类 : this出现在哪个类,哪个类就是当前类

// 并且 this是第一个成员变量,既然是变量,肯定有数据类型

// 那么this的类型是什么的时候可以存储当前类对象的地址? 1 当前类类型(Sup) 2 父类类型

// 如果是父类类型,说明发生了多态,会丢失特有属性,但是this可以调用当前类中所有的属性,所以this是当前类类型

// Sup this;

// this : 用在成员方法中,哪个对象调用了这个方法,this就指向哪个对象

// 在这里 m1是sub对象调用的,所以this 就指向 sub对象

// 而 sub是继承了Sup的

// 所以 等于是这样  Sup this = sub;   Sub sub = new Sub();  所以  Sup this = new Sub();

// 所以在这里 this 发生了多态

System.out.println(this.i);

this.m2();

}

public void m2() {

System.out.println("父类的m2");

}

}

class Sub extends Sup {

int i = 3;

public void m2() {

System.out.println("子类的m2");

}

}

  7 Instanceof

 

 

 

二 Abstract

 1 是什么 

 

 2 怎么用 

  3 注意

Abstract和final 不能同时存在

 三 Interface

 1 是什么

 2 怎么用 

  3 注意

如果接口和抽象类都能完成一件事,那么优先使用接口

因为类和接口是多实现,类和类是单继承

这样还能保留类的继承

  4 优点

当一个功能拥有多种不同实现的时候,就需要依赖接口编程,此时可以降低耦合度

如果说一个功能,只拥抱一种变化,就不需要使用接口了

还可以使用多态

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值