一、抽象方法和抽象类需要注意的几点:
1.抽象方法和抽象类都必须使用abstract修饰,有抽象方法的类只能被定义成抽象类。
2.抽象类不能被实例化,无法用new关键字来创建出一个实例。
3.抽象类中可以包含:成员变量,方法(普通方法,抽象方法都可以),构造器,初始化块,内部类,一共5个部分。其中构造器不能用于创建实例,主要用于被其子类调用。
4.含有抽象方法的类(一般有三种情况(1)包含直接定义了抽象方法。(2)继承了一个抽象父类,但没有完全实现父类包含的抽象方法。(3)实现了一个接口,但没有完全实现接口包含的抽象方法。)
5.abstract不能修饰成员变量,局部变量,构造器。
6.当使用abstract修饰类时,(因为抽象类不能实例化)表明这个类只能被继承
当使用abstract修饰方法时,表示这个方法必须由子类提供方法重写。
而final关键字修饰的方法不能被重写,final修饰的类不能被继承,所以final和abstract永远不能同时使用。
<span style="font-size:14px;">package com.chapter_six;
import java.lang.*;
//抽象方法的目的就是为了给子类设计一个通用的模板,这里举例
abstract class Abstractmethod{
//为了完成一个计算车速的函数的通用模板,
//转速
private double rotating;
public void setRotating(double rotating) {
this.rotating = rotating;
}
public abstract double radius();
public double getspeed(){
return 2*Math.PI*radius()*rotating;
}
}
public class Car extends Abstractmethod{
@Override
public double radius() {
// TODO Auto-generated method stub
return 2.8;
}
public static void main(String[] args){
Car ads = new Car();
ads.setRotating(3.4);
System.out.println(ads.getspeed());
}
}</span>
使用模板模式在面向对象的软件中非常常用,所以有简单规则:
(1)抽象父类可以之定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类实现。
(2)父类中可能包含需要调用其他系列方法的方法,这些被掉方法既可以又父类实现,也可以有其子类实现,父类提供的方法只是定义了一个通用的算法,其实现也许并不完全由其自身实现,而必须依赖其子类的辅助。
二、接口
1.接口中只能包含三种:成员变量(静态常量)、方法(抽象实例方法、类方法、默认方法)、内部类(内部接口、枚举)。
2.接口中所有的成员都是public访问权限。
3.对于定义成员变量:因为是静态常量,所以修饰符是public static final,也可以省略,系统会自动加上。
4.对于定义方法:抽象方法而言:修饰符是public abstract,可以省略修饰符由系统自动加上,抽象方法没有方法体。
默认方法:修饰符是public default,可以省略public,必须有方法体。
类方法:修饰符是public static,可以省略public,必须由方法体。
5.接口是多继承,一个接口可以继承多个父接口,但不能继承任何类