入坑Java(八)abstract & implements

abstract

1)定义
a.**abstract(抽象)**关键字可以用来修饰类和方法。
b.abstract修饰的类叫做抽象类,该类不能被实例化,也就是不能使用关键字new来创建该类对象。
c.abstract修饰的方法叫做抽象方法,抽象方法只有声明部分,而没有具体的方法体。

2)特点以及规范:
a.非抽象类子类的父类是一个抽象类的话,它必须具体实现父类的所有抽象方法,非抽象方法可以不实现。
b.抽象方法的类,必须用abstract来修饰(抽象类也可以没有抽象方法,但抽象方法必须出现在抽象类中)。
c.一个抽象类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现。

具体可以看例子:

public class TryAbstract {

	public static void main(String[] args) {
		System.out.println("a");
		sonn person = new sonn();
		person.ShowHello();
	}
}

// 抽象类(也可以使用接口,但是子类必须得重新接口方法or子类是抽象类)
abstract class Humen implements Comparable {

	// 抽象类成员可以是抽象的也可以是非抽象的,如下
	public Humen() {
		System.out.println("c");
	}

	// 抽象类不可以被实例化,但是有main方法的话,却是可以被执行的
	public static void main(String[] args) {
		System.out.println("抽象类不可以被实例化,但是有main方法的话,却是可以被调用的");
	}

	// 抽象方法必须写在抽象类里
	abstract void ShowHello();

	public void haha() {
	}
}

// 继承抽象类
class sonn extends Humen {
	// 继承抽象类,必须重写该类的抽象方法
	@Override
	public void ShowHello() {
		// 抽象方法内不可有private参数
		// private int b = 2;
		System.out.println("b");
	}

	// 抽象类不可以被实例化,具体如下(解声明)
	// Humen humen = new Humen();

	@Override
	public int compareTo(Object o) {
		// TODO Auto-generated method stub
		return 0;
	}

}

// 子类也是抽象类的话,无需重新继承抽象类的抽象方法
abstract class abstractSon extends Humen {
	// 不写Override也是可以的

}

implements

1)定义:
a.implement所表示的是接口
b.接口其实就是一个抽象类,这个类里面的方法全是抽象方法(抽象类可以包含非抽象方法,但接口这个抽象类里的方法必须全是抽象方法)

2)特点以及规范:
a.一个类可以实现多个接口,但只能继承一个父类
b.定义接口的类里面,方法默认是public abstract 的,也只能是public abstract
c.定义在接口里的变量只能是 public static final
d.可以通过interface关键字来定义抽象类为接口
e.可以通过implements 来实现接口,实现多个接口的时候,用“,”分隔开接口名称

具体看实例:

//可以继承一个父类,实现多个接口
public class TryCreateAndUseImplements extends FartherOne implements TheImplement1, TheImplement2 {

	//实现接口后,也要实现接口里的方法,不然会报错。
	@Override
	public void implementWay3() {}
	public void implementWay1() {}
	public void implementWay2() {}

}
//定义接口
interface TheImplement1 {
	// 因为接口里的方法都是抽象的,所以不用abstract来声明也是可以的
	public void implementWay1();
	// 也不需要在方法的后面在()后面加上{},如下:
	public abstract void implementWay2();

}
//定义接口
interface TheImplement2 {
	//默认public static final 所以不写也可以
	int i = 1;
	public static final int j = 2;
	
	//只能是public static final,除此之外的都会报错
	//protected int j = 2;
	public void implementWay3();
}

class FartherOne{
	protected int i = 1;
}

abstract 与 implements的区别

入坑Java(八)abstract & implements
注意
之前有说过,父类声明子类实例化,这个叫对象上转型实例化
farther faa = new son();
但在接口中,它有另一个名字叫接口回调其实都是一个东西,接口声明,实现接口的类进行实例化。

-------END