Java入门:接口与多态

接口

一种引用数据类型,多个类的公共规范
编译后仍然生成.class
(IDEA创建时同类,选择interface)

public interface 接口名{
    
    
常量
抽象方法
默认方法
静态方法
私有方法}

接口使用:必须有实现类,创建实现类对象进行使用

public class 实现类名称 implements 接口名称{
    
    
//必须覆盖接口中所有抽象方法}

如果实现类没有覆盖重写接口中所有的抽象方法,那么这个实现类必须是抽象类

抽象方法 abstract
接口中的抽象方法,修饰符必须是public abstract(可以省略)

默认方法 default
为了解决接口升级的问题(接口添加新的抽象方法)
默认方法也可以被实现类覆盖重写

public default 返回值类型 方法名称(参数){
    
    };

默认方法修饰符必须是public(可以省略)
调用默认方法,如果实现类中没有,会向接口中寻找

静态方法 static

public static 返回值类型 方法名称(参数){
    
    };

默认方法修饰符必须是public(可以省略)
不能通过接口实现类的对象调用静态方法!
通过接口名称直接调用(静态与对象无关)

私有方法 private
需要抽取一个公共方法,解决两个方法中代码重复的问题,但是必须对其私有化
普通私有方法,静态私有方法(解决静态方法的代码重复)

private 返回值类型 方法名称(参数){
    
    };
private static 返回值类型 方法名称(参数){
    
    };

普通私有方法通过对象调用,静态私有方法通过接口直接调用

接口中也可以定义成员变量,必须使用public static final修饰,并且必须初始化赋值(相当于常量)(可以省略,但性质不变)(通常使用全大写表示常量)

public interface 接口名{
    
    
	public static final 数据类型 变量名 = 初始值;}

(final关键词代表不可改变)
 

一个类可以同时实现多个接口

public class 实现类名 implements 接口名1,接口名2{
    
    }

当多个接口中存在重复抽象方法,只需要覆盖重写一次即可
当多个接口中存在重复默认抽象方法,必须对冲突的默认方法进行统一的覆盖重写
父类中的默认和接口中的默认方法重复,优先用父类的方法
Java中继承优先于接口实现

public class 类名 extends 父类 implements 接口{
    
    };

类与类是单继承的(一个类只有一个直接父类)
类与接口是多实现的(一个类可以实现多个接口)
接口与接口是多继承的(一个接口可以有多个父接口)
(多个父接口中的抽象方法可以重复,多个父接口中的默认方法不可冲突->子接口必须进行覆盖重写)


多态

多态性的前提是继承性(extends+implements)
一个对象同时具有多个形态:父类引用指向子类对象
(左父右子,把对象看作更大范围的事物)

父类 对象名 = new 子类();
接口 对象名 = new 实现类();

父类子类成员变量重名时,赋值时的数据类型(等号左边)是谁,就使用谁的成员变量
父类子类成员方法重名时,赋值时new的是谁(等号右边)是谁,就是用谁的成员方法

多态性的优势:
无论new的是哪个子类,左侧父类的调用方法不会改变

猜你喜欢

转载自blog.csdn.net/Rachel_IS/article/details/104459875