您的位置:首页 > 编程语言 > Java开发

Java 抽象类的详解

2016-07-16 14:33 330 查看
1.概念

当描述一个类的时候,如果不能确定功能函数如何定义,那么该类就可以定义为抽象类,功能函数应该描述为抽象函数。

2.实现方式

(1)定义类的方法,无法确定方法体,不写方法体

(2)根据提示在方法加入abstract修饰

(3)根据提示将类加入abstract修饰

3.特点

(1)有抽象函数的类,该类一定是抽象类。

(2)抽象类中不一定要有抽象函数。

(3)抽象类不能使用new创建对象

  创建对象,使用对象的功能,抽象类的方法,没有方法体。

(4)抽象类主要为了提高代码的复用性,让子类继承来使用。

(5)编译器强制子类实现抽象类父类的未实现的方法。

    可以不实现,前提是子类的也要声明为抽象的。

4.优点

(1)提高代码复用性

(2)强制子类实现父类中没有实现的功能

(3)提高代码的扩展性,便于后期的代码维护

5.抽象类的主要几个问题

(1)抽象类不能创建对象,那么抽象类中是否有构造函数?

抽象类中一定有构造函数。主要为了初始化抽象类中的属性。通常由子类实现。

看下面代码:

abstract class Animal {

String name;

// 抽象类可以有构造函数
Animal() {

}

Animal(String name) {
this.name = name;
}

abstract void shout();

}

class Dog extends Animal {
Dog() {

}

Dog(String name) {
super(name);
}

void shout() {
System.out.println("旺旺");

}
}

class Demo3 {

public static void main(String[] args) {
// 抽象类不能创建对象
// Animal a=new Animal();
Dog d = new Dog("旺财");

System.out.println();
}
}


(2)final和abstract是否可以同时修饰一个类? 

一定不能同时修饰。


6.抽象类注意的细节

抽象类可以没有抽象方法(java.awt.*的类就是这样子操作的)。

抽象类可以继承普通类与抽象类,但是只能继承一个

抽象类可以实现接口~可以实现多个接口

抽象类不能直接使用类名创建实例,但是有构造方法,构造方法是让子类进行初始化。

抽象类一定有构造方法。

abstract与其他修饰符的关系:

final与abstract不能共存

   final:它的作用  修饰类代表不可以继承  修饰方法不可重写

   abstract修饰类就是用来被继承的,修饰方法就是用来被重写的。

static static修饰的方法可以用类名调用,

 对于abstract修饰的方法没有具体的方法实现,所有不能直接调用,

 也就是说不可以与static共存。

private

   private修饰的只能在本类中使用,

   abstract方法是用来被子类进行重写的,有矛盾

   所有不能共存.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息