一、抽象方法和抽象类需要注意的几点:

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.接口是多继承,一个接口可以继承多个父接口,但不能继承任何类