Java_OOP三大特性

1.多态

1.1定义

是指一种行为,具有多种不同的表现形式

Java 父类 抽象方法 不同子类重写父类的方法是有不同的实现方式 。

1.2 多态的前提【重点】

a)继承或者实现
b)方法重写
c)父类引用指向子类的对象

父类类型 变量名=new 子类对象();
	变量名.方法名()

Father父类   Son子类
Son son=new Son(); ->son间接调用Father成员

Father f=new Son(); 多态
   f.method() ;-

当使用多态方式调用方法时,首先检查父类是否有该方法,如果没有,则编译错误,执行的是子类重写的方法。

Animal ->Cat Dog

1.3 多态好处

可以使用程序编写更加简单,并有良好的可扩展性

1.3.1、向上转型:

a)多态本身是子类类型向父类类型向上转型的过程,当父类的引用指向一个子类实例时,便是向上转型,这个过程默认完成。自动转型。
1.父类类型 变量名=new 子类类型()
Animal a=new Cat(); ->
Cat自动转成了Animal,实现上a.eat()但是执行
时候子类负责实现方法a.eat()
面向对象最精彩:
编译期:JVM -》Animal 引用
运行期:JVM -》父类引用指向哪子类 -》调用子类方法()

编译期-》喝水 运行期 可乐,冰水, 咖啡。

            Cat  cat=new Cat Dog dog=new Dog() ->编译期Cat 或 Dog   -》运行期-》eat()。
            Sheep p=new Sheep();   ->Animal a=new Sheep();  a.eat()

可扩展 易于修改 。
向上转型要点:
1.自动转型,隐式转换,向上转型就是父类引用指向子类实例,也可以说,子类对象可以赋值给父类引用。
2.向上转型,是安全的,因为子类都要重写父类的方法,父类引用指向哪个子类,就调用子类重写父类的方法。
3.向上转型,父类只能调用子类重写的方法,不能调用子类特有的方法。
(非调用子类特有的方法,需要向下转型)
4.父类的静态方法是不允许子类重写。

1.4小结:

1.4.1 多态:

同一行为,不同表现形式
Java多态:
1)继承关系
2)子类重写父类的方法
3)父类引用指向子类实例
父类引用指向子类实例—》向上转型-》子类会自动转成父类
父类.方法—》子类重写的方法完成。
好处:
编译期 -》父类引用
运行期 -》父类引用指向哪个子类的实例 -》调用方法-》由哪个子类 负责实现。

1.4.2 动态绑定:
     前提:向上转型
      机制:能识别出对象转型前的类型,从而自动调用该子类方法
	Animal.eat()   ->Cat cat对eat()方法重写

Animal.eat() ->Dog catdog对eat()方法重写
绑定:就是将一个方法和所在类连接在一起,就叫绑定

        Chinese c=new Chinese()   c.speak();speak()->Chinese 连接在一起
    分类:静态绑定和动态绑定
         静态绑定:在程序编译期就知道方法和哪个对象连接在一起。(前期绑定)
        动态绑定: 在程序运行期才能连接和类型绑定在一起,也就是说JVM
		    在运行期根据对象类型自动判断的连接哪个方法也叫后期绑定
1.4.3 向下转型:

a)父类转子类的过程,强制转换:
i.一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制转格式,就是向下转型。
ii.目的,父类能够调用子类特有的方法

2 接口
2.1概念:

是Java语言一种引用类型(数组、类与对象 接口、枚举)
如果说类内部封装了成员变量,构造方法,成员方法。
那么接口主要封装方法,方法集合。
a) 抽象方法 (抽象类可以有,可以没有 接口的方法必须是抽象)JDK1.7以前
b) 默认方法、静态方法(JDK1.8),私有方法(JDK1.9)
接口作用: 制定了标准或规范

2.2 接口定义:
	 interface 关键字  类 -》 .class,但是一定明确它并不是类,是一种引用的数据类型。【数组 类 接口枚举】

接口使用:接口的使用,它不以创建对象,但是可以被实现 (implements 类似于被继承)。一个接口实现类(可以看做接口子类),需要实现接口中所有抽象方法。创建该类对象,就可以调用方法了,如果你没有实现接口所有抽象方法,那么你肯定是抽象类。

接口语法格式:
Public interface 接口名称{
抽象方法
默认方法
静态方法
私有方法
}

接口实现类
Public class 类名 implements 接口{
必须要全部实现抽象方法
}

2.3 jdk 1.7接口新特性:

不光抽象方法
默认方法、静态方法 、私有方法

1.默认方法

 default 
interface A {
     public default void methodA(){
    
}
Public default void methodB (){
}
}

Interface B  {
     		public default void methodA(){
    
}
Public default void methodB (){
}
}
接口实现类:
          Public class C implements A,B {
            Public void method(){
             System.out.println(“method”) 
}
}

Public class c extends A,B 

2.4 Java 在接口层面->多实现

一个类可以实现多个接口
设计类时候
一个类继承于一个父类,同时可以实现多个接口 (间接实现多继承)

静态方法:static void methodB(){}

其他成员:
1.接口中无法定义成员变量,int a=0, a 接口可以定义常量,其值必须赋值且是不可改
接口变量都是常量,用public static final修饰 ,名字需要大写
2.接口中:没有构造方法,不能创建对象
3.接口中:没有静态代码块

面试题:接口和抽象类区别

1.抽象类要被子类继承(extends),接口要被类实现(implements)
2.抽象类里面方法,可以只有定义(抽象方法),普通方法方法声明方法实现
接口中的所有方法,都只有方法的声明,没有方法实现
3.抽象类可以有变量、接口中定义变量只能公开不可修改的常量。
4.抽象类可以构造方法,接口没有构造方法
5.接口可以多实现,抽象类只能单继承
6.接口的抽象级别要比抽象类高。
7.接口是设计结果,抽象类是重构结果
共同点:向上转型 -》父类的引用指向子类对象
动态绑定-》通过引用调用子类重写的方法
多态 (接口必须多态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值