多态 抽象 接口

多态的介绍

概念:多态就是某一个事物在不同时刻表型出来的不同状态

多态的前提:要实现多态必须在有继承的基础下;
要有方法的重写(没有重写则多态就没有实际的)
要有父类引用指向子类的对象(比如猫继承动物)
动物 an=new 猫();

多态中成员访问特点:

左边表示父类
右边表示子类

成员变量
编译看左边,运行看左边。(简单理解为最后的值跟父类一样)
构造方法
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化。(看子类重写后的)
成员方法
编译看左边,运行看右边。(运行跟随子类的)
静态方法
编译看左边,运行看左边。(静态不受影响所以跟随父类)
(静态和类相关,算不上重写,所以,访问还是左边的)

多态的优缺点:

优点:因为继承为前提所以提高了代码的维护性
提高了代码的扩展性(有多态自身保证)

弊端:不能直接使用子类的引用

解决方法:把父类的引用强制转化为子类的引用(向下转型)
动物 an=new 猫();
Cat cat=(Cat) an;

举例:

package MyDemo;

public class Text{
    public static void main(String[] args) {
       Animal an= new Cat();
       an.show();
       Cat cat=(Cat)an;   //向下转型调用子类特有方法
       cat.eat();
      // ((Cat) an).eat();
    }
}

class Animal{
    public void show(){
        System.out.println("父类的方法");
    }
}
class Cat extends Animal{

    @Override
    public void show() {
        System.out.println("子类的方法");
    }
    public void eat(){
        System.out.println("调用了子类的特有方法");
    }
}

抽象类

抽象类特点:

	抽象类和抽象方法必须用abstract关键字修饰
		抽象类格式:		abstract class 类名 {}
		抽象方法格式:	public abstract void eat();
   抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

构造方法的作用

		用于子类访问父类数据时的初始化
	抽象类不能直接实例化那么,抽象类如何实例化呢?
		按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

抽象类的子类

		要么是抽象类
		要么重写抽象类中的所有抽象方法

抽象类的成员特点:

 成员变量:既可以是变量,也可以是常量。
 构造方法:有。
				用于子类访问父类数据的初始化。
 成员方法:既可以是抽象的,也可以是非抽象的。

接口

接口概述:为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些对象需要把额外功能调用实现即可;

接口用关键字interface表示

  		 格式: 	interface 接口名 {}

类实现接口用implements

         表示	 格式:	class 类名 implements 接口名 {}

接口利用多态来实现实例化

接口的子类

		a:可以是抽象类。但是意义不大。
		b:可以是具体类。要重写接口中的所有抽象方法。

接口的特点:

成员特点

	        成员变量;只能是常量,并且是静态的。
			默认修饰符:public static final
			建议:自己手动给出。

构造方法:接口没有构造方法。
成员方法:只能是抽象方法。
默认修饰符:public abstract

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值