Java – 面向对象(抽象与接口)

简介

Java 是一款面向对象的编程语言,它提供了抽象类和接口,抽象和接口更像是一种约束,要求继承它的类,必须按照指定的规定进行编写代码。

 

抽象类abstruct

定义格式

抽象方法的定义格式:

public abstract 返回值类型 方法名(参数列表);

抽象类的定义格式:

public abstract class 类名 {}

 

注意:

1.抽象类不能实例化

2.抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

3.可以有构造方法

不能实例化,但是构造方法是给子类创建实例的时候给子类初始化成员变量的

4.抽象类的子类

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

要么是抽象类

 

接口

接口就是一种规则。约束开发过程中必须实现某些功能

在我们平时的开发中,开发多个类时,容易忽略了一些开发规范,比如开发方法时的命名方式,方法实现等等,也能规范多态应用中类方法不规范的问题。

 

定义接口

1.接口用关键字 interface 接口名 {}

2.接口不能实例化

3.接口和类之间是实现关系,通过 implements 关键字表示

public class 类名 implements 接口名 {}

4.接口的子类称为实现类

要么重写接口中的所有抽象方法

要么是抽象类

注意:

1.接口和类的实现关系,可以单实现,也可以多实现。

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

2.实现类还可以再继承一个类的同时实现多个接口

public class 类名 extends 父类 implements 接口名1,接口名2 {}

 

接口中成员的特点

成员变量

接口中的成员只能是常量,而且默认修饰符public static final 修饰

构造方法

接口中是没有构造方法的

成员方法

接口中的成员方法只能是抽象方法

默认修饰符:public abstuct

public interface Inter {
    
    /* 显式声明 public static final   */
    public static final String b = "abc";
    
    /* 成员变量如果不写,Java 也会帮你自动带上,而且只能是 public static final  */
    String a = "abc";


    /* 显式声明 public abstract*/
    public abstract void Methods();

    /* 方法体如果不声明,Java 会帮你自动带上,而且只能是 public abstract */
    void Method();

}

 

 

在JDK 7以前,接口中只能定义抽象方法

JDK8新特性:接口中可以定义有方法体的方法。

JDK9的新特性:接口中可又定义私有方法。

 

接口和类之间的关系

类和类的关系

继承关系,只能单继承,不能多继承,但是可以多层继承

class Zi extends Fu {}

 

类和接口的关系

实现关系,可以单实责,也可以多实现,还可以在继承一个类的同时实现多个接口。

class Person implements Inter {}
class Student extends Person implements Inter {}

当多个接口中存在相同名称的接口名时,实现类中只需要实现一次就可以。

 

接口和接口的关系

继承关系,可以单继承,也可以多继承

// 声明接口1,里面有一个方法约束 Method1
public interface Inter1 {
    public abstract void Method1();
}

// 声明接口2,里面有一个方法约束 Method2
public interface Inter2 {
    public abstract void Method2();
}

// 声明接口3,它继承了接口1和接口2,里面有一个方法约束 Method3
public interface Inter3 extends Inter1,Inter2 {
    public abstract void Method3();
}

// 在实现 接口3 时,需要把 接口3 继承的方法约束也必须实现
public class InterEmpl implements Inter3{
    @Override
    public void Method1() {

    }

    @Override
    public void Method2() {

    }

    @Override
    public void Method3() {

    }
}

 

JDK8 新增特性

接口可以明确约束类对于方法体的实现规范,但有个问题,接口就成为一个非常重要且大局的事情,因为它关系到下面所有实现该接口的类,如果这个接口增加一个新的接口方法,那么所有实现这个接口的类都会报错。

 

默认方法

JDK8中提供了一种新的方式,允许在接口中声明有方法体的方法,这样当接口需要新增方法时,使用这种方法体方法,不会使实现接口的类报错,且这个接口方法体是可选实现,类只需要到需要使用这个接口方法时,才去重写就可以。

接口中默认方法的定义格式

格式:public default 返回值类型 方法名(参数列表){ }

范例:public default void show(){ }

 

接口中默认方法的注意事项

1.默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉 default 关键字

2.public 可以省略,default 不能省略

3.如果实现了多个接口,多个接口中存在相同名字的的默认方法,子类就必须对该方法进行重写。

public interface Inter1 {
    
    // 定义了一个 show 默认方法
    public default void show(){
        System.out.println("Inter1中的默认接口方法");
    }
}

public interface Inter2 {

    // 定义了一个 show 默认方法
    public default void show(){
        System.out.println("Inter2中的默认接口方法");
    }
}

public class InterEmpl implements Inter1,Inter2{
    
    // 类必须要重写 show 方法,因为两个接口存在相同默认方法,类在没有重写的情况下,被调用时会分不清该执行那个接口的默认方法
    public default void show(){
        System.out.println("Inter2中的默认接口方法");
    }
}


 

静态方法

允许在接口中定义静态方法,需要用 static 修饰

 

接口中静态方法的定义格式

格式:public static 返回值类型 方法名(参数列表){ }

范例:public static void show(){ }

 

注意

静态方法只能通过接口名调用,不能通过实现类名或者对象名调用

public 可以省略,default 不能省略

 

JDK9 新增的方法

私有方法

JDK9中给接口提供了 private 私有方法,可以定义私有方法,供接口自己调用。

因为JDK8中,Java提供了接口的默认方法,默认方法有方法体,所以意味着有重复代码在每个方法体中,如果把相同代码抽取出来放到另一个方法中供各个默认方法调用,但方法只能定义 public ,而我并不想外面的类调用这个属于接口自己使用的方法。

JDK9提供的私有方法,可以解决这样的问题。

 

定义格式

普通的私有方法,给默认的方法服务的

格式1:private 返回值类型 方法名(参数列表){}

范例1:private void show(){}

 

静态的私有方法,给私有方法服务的

格式2:private static 返回值类型 方法名(参数列表){}

范例2:private static void show(){}

 

接口的应用

接口多态

接口可像父类那样,只要类实现了接口的方法,那么我们可以把这个接口看作是这个类的父类,可以使用多态的方式传递类实例

// 定义了一个接口
public interface Inter3 extends Inter1,Inter2 {
    public abstract void Method3();
}

// 在类中实现了 Inter3 接口,那么我们可以把 Inter3 看作是 InterEmpl 类的父类
public class InterEmpl implements Inter3{}

我们就可以使用接口名来接收
Inter3 empl = new InterEmpl();
getInter( empl )

// 定义要传入的类的时候,也可以传入类实现的接口的类型
public static void getInter(Inter3 intempl){ }

当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态

 

如果您喜欢本站,点击这儿不花一分钱捐赠本站

这些信息可能会帮助到你: 下载帮助 | 报毒说明 | 进站必看

修改版本安卓软件,加群提示为修改者自留,非本站信息,注意鉴别

THE END
分享
二维码
打赏
海报
Java – 面向对象(抽象与接口)
简介 Java 是一款面向对象的编程语言,它提供了抽象类和接口,抽象和接口更像是一种约束,要求继承它的类,必须按照指定的规定进行编写代码。   抽象类abstruct 定义格式 抽象方法的定义……
<<上一篇
下一篇>>