------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------    

 

  • 抽象类

抽象方法:由abstract 修饰的方法为抽象方法,抽象方法只有方法的定义,没有方法体实现,用一个分号结尾。

抽象类:一个类中如果包含抽象方法,就应该用 abstract 关键字声明为抽象类。

一个抽象类中可以没有抽象方法,但有抽象方法的类一定是抽象类。

可以没有抽象方法,抽象类不能建立对象,所以无法实例化

如果一个类继承了抽象类,必须重写其抽象方法(除非该类也声明为抽象类)

 

abstract final关键字不可以同时用于修饰一个类,因为final 关键字使得类不可继承,而abstract 修饰的类如果不可以继承将没有任何意义。也不能与private, static 共存

 

抽象类的意义:为其子类提供一个公共的类型;封装子类中的重复内容;

定义有抽象方法,子类虽然有不同的实现,但该方法的定义是一致的。

 

  • 抽象类的成员特点:

         成员变量:

                   静态 可以,类名直接调用

                   非静态 可以,子类对象调用

         构造方法:

                   有构造方法,但是不能实例化,作用:用于子类访问父类数据的初始化

         成员方法:

                   静态 普通方法,有方法体,可以,类名直接调用

                   非静态普通方法,有方法体,可以,子类对象调用

         抽象类的抽象方法,用于限定子类必须完成某些动作

         抽象类的非抽象方法,用于提高代码的复用性

         没有抽象方法的抽象类,存在有适配器意义

 

  • 抽象类给子类成员变量赋值,老师案例

 

abstractclassTeacher {

    private String name;

 

    public Teacher(String name) {

       super();

       this.name = name; // 父类构造器对子类成员变量赋值

    }

 

    publicabstractvoid teacher();

 

    public String getName() {

       returnname;

    }

 

//  publicvoid setName(String name) {

//     this.name= name;

//  }

 

}

 

class JavaSE extends Teacher {

 

    public JavaSE(String name) {

       super(name);

    }

 

    @Override

    publicvoid teacher() {

       System.out.println(getName() + " JavaSE");

    }

 

}

 

publicclassTeacherTest {

 

    publicstaticvoid main(String[] args) {

       Teachert = new JavaSE("呵呵");

//     Teachert = new JavaSE(null);

//     t.setName("呵呵");

       t.teacher();

    }

}

 

  • 接口中成员的定义:接口没有构造方法

         成员变量:public static final数据类型变量名 = 初始化值; // 需要初始化,只能常量

         成员方法:public abstract返回值类型方法名(); // 全抽象,不能建立对象

修饰符都是固定模式,少写或不写,编译时会自动补全

一个类实现了某个接口后必须实现该接口中定义的所有方法,否则还是抽象类。

接口中的多态:接口可以作为一种类型声明变量,一个接口类型的变量可以引用实现了该接口的类的对象;通过该变量可以调用该接口中定义的方法(具体的实现类提供了方法的实现)。即接口引用指向实现类的对象

         一个类多实现接口是没有安全隐患的:接口方法没有方法体,根本不能运行,接口方法怎么实现功能,完全由实现类重写决定。

         实现类如果实现多个接口,接口中的全部抽象方法都要覆盖,包括接口继承的的父类的抽象方法。

         接口的意义:降低程序的耦合性,提高程序的扩展性。

  • 类和接口之间的关系:

         类与类之间是继承关系,单继承,可以多层继承

         类与接口之间是实现关系,可以多实现

         接口与接口之间是继承关系,支持多继承

Java 中支持多继承吗? 类与类之间是单继承,接口之间可以多继承。

 

  • 抽象类和接口的区别:

         成员区别:

                   抽象类:变量,常量;抽象方法,非抽象方法;构造方法

                   接口:常量;抽象方法;没有构造方法

         关系区别:(继承与实现)

         设计理念区别:

                   抽象类:is a 关系,共×××

                   接口:like a 关系,扩展功能