java多态和接口demo_【Java_09】接口、多态

一、接口

1. 接口的介绍

接口是Java中一种引用类型,是方法的集合。接口中主要封装了方法,包含抽象方法(JDK 1.7 之前),默认方法、静态方法(JDK 8),私有方法(JDK 9)。

2. 接口的使用

① 格式

public interface 接口名{

//抽象方法(JDK 1.7 之前)

//默认方法(JDK 8)

//静态方法(JDK 8)

//私有方法(JDK 9)

}

② 抽象方法(☆☆☆☆☆)

//与抽象类相似

public interface Inter{

public abstract void method();

}

② 默认方法

//主要用于升级接口,防止以前的实现类报错,新创建的实现类可以覆盖默认方法。

//接口中有多个默认方法是,实现类都可以继承使用。

public interface Inter{

public default void method(){

System.out.println("run···");

}

}

③ 静态方法

//直接使用接口已经完成的现成功能。

public interface Inter{

public static void method(){

System.out.println("run···");

}

}

④ 私有方法

//用于抽取接口中相同的代码块

//1.私有方法:只有默认方法可以调用

public default void methodA(){

method();

}

public default void methodB(){

method();

}

private void method() {

System.out.println("runA···");

System.out.println("runB···");

}

//2.私有静态方法:默认方法和静态方法都可以调用

public default void methodA(){

method();

}

public static void methodB(){

method();

}

private static void method() {

System.out.println("runA···");

System.out.println("runB···");

}

⑤ 注意

* 接口不能直接 new

* 调用接口原本的默认方法:接口名.super.默认方法名();

* 静态方法属于接口,只能通过:接口名.静态方法名() 调用。

3. 接口的多实现

① 格式

* 继承并实现

public class 类名 extends 抽象类 implement 接口名{

//方法体

}

* 多实现

public class 类名 [ extends Object ] implement 接口名1, 接口名2,··· ,接口名n {

//方法体

}

* 多继承

public interface 类名 extends 接口名1, 接口名2,··· ,接口名n {

//方法体

}

② 注意

* 如果抽象方法有重名,则只需要重写一次。

* 如果默认方法有重名,则必须重写。

* 那个接口在前则那个接口优先级高。

二、多态

1. 多态的介绍

* 多态是指同一种行为有多种不同的表现形式

2. 多态的使用

① 格式

* 父类引用指向子类对象;接口引用指向实现类对象。

* 父类 变量名 = new 子类(); 或 接口 变量名 = new 实现类();

例: Fu f = new Zi(); 或 Inter inter = new InterImpl();

② 注意

* 多态调用成员变量时:编译看左,运行看左。即:父类没有则不能使用

* 多态调用成员方法时:编译看左,运行看右。即:父类没有则不能通过编译

③ 类型转换

* 向上转型(默认):父类 变量名1 = new 子类();

例:Fu f = new Zi();

* 向下转型(强制):子类 变量名2 = ( 子类 ) 变量名1;

例:Zi z = (Zi) f;

* 为什么要向下转型:使用多态方式无法调用子类特有方法。

* 向下转型需要注意只有以前是这个类才能转。

例:Animal animal = new Cat();

Cat c = (Cat)animal;

* instanceof 用来判断向下转型时是否属于该类。

例:animal istanceof Cat

④ 多态的好处

* 实际开发中,父类类型作为方法形式参数,传递子类对象,更能体现多态的扩展性与便利性

* 示例

//父类

public abstract class Phone {

public abstract void price();

}

//子类,联想

public class LenovoPhone extends Phone{

public void price1() {

System.out.println("3999");

}

}

//子类,华为

public class HonorPhone extends Phone{

public void price2() {

System.out.println("6999");

}

}

//测试类

public class Test{

public static void main(String[] arg) {

//父类引用指向子类对象

Phone phone = new LenovoPhone();

method(phone);

}

//判断属于那个子类

public void method(phone phone) {

if(phone instanceof LenovoPhone) {

//向下强转

LenovoPhone lp = (LenovoPhone)phone;

//调用联想手机类独有方法

lp.price1();

System.out.println("这是联想手机");

}

if(phone instanceof HonorPhone) {

//向下强转

HonorPhone hp = (HonorPhone)phone;

//调用华为手机类独有方法

hp.price2();

System.out.println("这是华为手机");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值