Java教程

Java 面向对象 抽象类与接口

本文主要是介绍Java 面向对象 抽象类与接口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

   在类的继承中,如果一个个新的子类被定义,子类变得越来越具体,父类变得更加一般和通用,类的设计应该保证父子类能够共享特征,有时将父类设计得非常抽象,使得父类没有具体的实现,这样的类叫做抽象类;一般当我们设计一个类,不需要创建此类的实例时,可以考虑将该类设置成抽象类,让其子类实现这个类的抽象方法。

abstract关键字用于修饰类和方法:

1)抽象类

抽象类是一个受限制的类,不能用于创建对象(要访问它,它必须从另一个类继承)。

2)抽象方法

抽象方法只能在抽象类中使用,并且没有实现。 由子类实现抽象方法(从继承)

抽象类可以同时具有抽象方法和常规方法:

abstract class Animal {
  public abstract void eat();
  public void sleep() {
    System.out.println("Zzz");
  }
}

从上面的示例中,无法创建Animal类的对象:

Animal myObj = new Animal(); 要访问抽象类,它必须从另一个类继承。使用extends关键字从类继承。

接口

        接口也是抽象的,抽象的原因与抽象类的原因类似。但用处不同,接口一般用于定义类的统一行为,而抽象类是“继承”。

        类重写一个接口中的所有抽象方法称为接口的实现。

        接口解决的问题:JAVA不直接支持多继承,但支持多实现。

        接口体中包含常量定义和方法声明,不允许对方法进行定义。

        接口可以说是完全抽象的抽象类。

        子类需要覆盖接口中的所有的抽象方法才能实例化,否则它是一个抽象类。

        如果一个类实现了一个接口,该类必须对接口中声明的方法进行定义。实现方法时方法的名字、返回类型、参数个数及参数类型必须与接口声明的一致。

        接口中,方法的修饰符默认是public abstract;接口中的常量的修饰符默认是public static final;所以子类中必须使用public来修饰定义的方法。


        接口的定义格式:interfacd A{

                                        public static final int size=100;

                                        public abbstract void talk();

                                                }

      接口的实现: interfacd A{

                              public static final int size=100;

                              public abbstract void talk();

                                        }

                                class B implements A{

                                        //实现A中的抽象方式

如:

package 接口;

interface A{
 public static final int size=100;
 public abstract void talk();
// public abstract void eat();
}
class B implements A{
 //实现A中的抽象方法
 public void talk() {
  System.out.println("B talk");
 }
}
public class Demo {

 public static void main(String[] args) {
  new B().talk();

 }

}

 抽象类与接口的异同:

  • 相同:
    • 都是抽象的
    • 都不能被实例化
    • 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但是不提供具体的实现。
  • 差异:
    • 接口是完全抽象

  • 概念设计区别:
    • 抽象类是可以有非抽象方法的,而接口是完全抽象的,其实可以这样理解他们的区别:A,B都是一个抽象类,但它们由于是“父类”,所以一般来说都是有一些具体属性的,可以说抽象类是一个父类的抽象化,但它离不开父类与子类的关系;但接口定义的是行为,它并没有强的父子类关系,它只是完全抽象的定义了一些行为作为标准,就像工厂里的元件的各种标准。
    • 而接口中的变量和方法的修饰符都显示出接口是一个“开放的固定的行为标准

这篇关于Java 面向对象 抽象类与接口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!