面向对象之多态,抽象类,接口

本文深入探讨面向对象编程中的多态概念,包括其定义、实现方式及应用场景,并通过示例展示多态如何提高程序的扩展性和灵活性。此外,还讨论了抽象类与接口的区别及其在多态中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多态

概念:同一个对象,在不同时刻表现出来的多种形态。
如果没有了继承,多态也失去了存在的前提。

public class Animal {
    public void say() {
        System.out.println("动物叫声");
    }
}
public class Cat extends Animal {
    @Override
    public void say() {
        System.out.println("猫叫````");
    }
}
public class Dog extends Animal {

    @Override
    public void say() {
        System.out.println("狗叫·····");
    }
}

public class Test {
	public static void run(Animal animal){
		animal.say();
	}
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.say();//执行的是dog类的方法(右边声明的是Animal对象 调用的是在子类重写过的say()方法)
        Animal cat = new Cat();
        Main.run(cat);//执行的是cat类的方法(实际传入的参数是Animal的实像对象)
    }
}

多态在方法的参数上尤为多见,
1.左边类型是父类类型,右边new的是子类对象。
2.方法的参数定义的是父类类型,具体使用时数据是子类对象。

多态中成员访问特点

1成员变量:编译看左边,执行看左边。(变量习惯性的私有化这样就不需要就这些了)
2成员方法:编译看左边,执行看右边。(因为方法能重写)

多态的好处和弊端

好处:提高了程序的拓展性(定义方法的时候,使用父类类型作为参数,将来在使用的时候使用具体的子类参与操作)
弊端:不能使用子类的特有功能(成员只会映射到父类上)

多态中的转型

1.向上转型: 子类类型赋值给父类类型。
2.向下转型: 父类类型赋值给子类类型。(需要强转)

抽象类

abstract:

修饰类:表示该类为抽象类,里面可以有抽象方法也可以没有
修饰方法:使用该关键字修饰的方法不能有具体的实现,存放该方法的类必须是抽象类。

抽象类和普通类的异同点:

不同:
1.抽象类需要使用abstract修饰。
2.抽象类不能够直接实例化。(构造方法一般用来子类访问父类数据初始化)
相同:
1.可以没有抽象方法。
2.可以有任何的其他方法。
3.可以有构造方法。
4.可以有成员变量。
抽象方法:只有方法的声明,没有方法的实现。这样的方法叫做抽象方法。子类继承抽象类必须实现抽象方法,除非子类是抽象类。

接口

1,接口就是一种公共的数据规范,只要符合规范标准大家都可以通用。
2,java中接口更多的体现在对行为的抽象。
3,接口java中最高抽象的结构。

接口的特点

1.不用class,用interface修饰
2.实现用implement表示
3.接口不能实例化
4. jdk1.8以前接口中只能有抽象方法(默认修饰符:public abstract)
5. jdk8以后可以有默认方法、静态方法、私有方法
6. 成员变量只能是常量(默认修饰符:public static final)
7. 接口之间可以多继承。

(注意继承是“is a”的关系‘是不是’,接口是“like a”的关系‘像不像’)

抽象类是对事物的抽象,而接口是对行为的抽象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值