12-14java面向對象之抽象類&接口

抽象類

1.抽象類概念

抽象類:包含抽象方法的類,相比於普通類,他多了一個抽象方法。

抽象方法:只聲明但是沒有實現的方法,用abstract關鍵字來定義。

未實現的舉例:

class A
{
	private String name ;
	public void print()
}

在類中聲明的方法,有{}則說明有方法體,則實現;沒有{},則未實現。

2.使用規則

包含一個抽象方法的類必須是抽象類

抽象類和抽象方法都使用abstract關鍵字聲明

抽象方法只需要聲明不需要實現

抽象類必須被子類繼承,子類(不是抽象類)必須覆寫全部的抽象方法

3.定義格式

abstract class A
{
	private String name ;
	public abstrct void print();
}
給出實例化代碼

//本例是對抽象類的測試
abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}
//繼承並覆寫
class B extends A
{
	public void print()
	{
		System.out.println("flag = " + flag + ",姓名:" + getName());
	}
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		B b = new B();
		b.print();
	}
}

4.注意問題

4.1

Final定義類不能有子類,但是抽象類定義之後必須有子類,所以抽象類不能與final共存。

final abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public A()
	{
		System.out.println("抽象類的構造方法");
	}
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}

TestAbstract.java:2: 錯誤非法的修飾符組合: abstractfinal

final abstract class A

               ^

TestAbstract.java:17: 錯誤無法從最終A進行繼承

class B extends A                ^


4.2

抽象類也是類,存在構造方法。

//本例是對抽象類的測試
abstract class A
{
	public static final String flag = "china" ;
	private String name  = "Tyrion";
	public A()
	{
		System.out.println("抽象類的構造方法");
	}
	public String getName()
	{
		return this.name;
	}
	public abstract void print();
}
//繼承並覆寫
class B extends A
{
	public B()
	{
		super();
		System.out.println("子類的構造方法");
	}
	public void print()
	{
		System.out.println("flag = " + flag + ",姓名:" + getName());
	}
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		B b = new B();
		b.print();
	}
}

2.接口

1.接口的概念

接口是一種特殊類,在接口中,包含全局常量和公共抽象方法。

格式:

Intterface 接口名稱{

Public static fianl xxx

Public abstrac xxx

}

//本例是對接口的測試
interface A
{
	public static final String NAME ="Tyrion";
	public abstract void print();
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		
	}
}

2.接口的實現

由於接口中有抽象方法,所以要通過子類使用implements關鍵字來實現接口(可以實現多個接口),在子類中要全部覆寫抽象方法。

格式:

Class A   implements 接口1,接口2  {}

//本例是對接口的測試
interface A		//定義接口A
{
	public static final String NAME ="Tyrion";
	public abstract void print();
}
interface B		//定義接口B
{
	public abstract void say();
}
class C implements A,B		//子類C實現接口A,B
{
	public void print()
	{
		System.out.println("hello");
	}
	public void say()
	{
		System.out.println("world");
	}
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		C c =new C();	//實例化子類對象
		c.print();
		c.say();
	}
}

一個子類(不是抽象類)既可以繼承抽象類,也可以實現接口。

格式

Class 子類 extends 抽象類 implements 接口1....{}

//本例是對接口的測試
interface A		//定義接口A
{
	public static final String NAME ="Tyrion";
	public abstract void printA();
}
interface B		//定義接口B
{
	public abstract void printB();
}
abstract class C		//定義抽象類
{
	public abstract void printC();
}
class D extends C implements A,B		//子類D實現接口A,B並且繼承抽象類C
{
	public void printA()			//覆寫所有的抽象方法
	{
		System.out.println("接口A");
	}
	public void printB()
	{
		System.out.println("接口B");
	}
	public void printC()
	{
		System.out.println("接口C");
	}
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		D d =new D();	//實例化子類對象
		d.printA();
		d.printB();
		d.printC();
	}
}

java中接口不能繼承抽象類,但是一個接口可以同時繼承多個接口

格式:

Interface 子接口 extends 接口1....{} 

//本例是對接口的測試
interface A		//定義接口A
{
	public static final String NAME ="Tyrion";
	public abstract void printA();
}
interface B		//定義接口B
{
	public abstract void printB();
}
interface C extends A,B		//子接口C繼承接口A,B
{
	public abstract void printC();
}
class D implements C		//子類D實現接口C要覆寫全部的方法
{
	public void printA()			//覆寫所有的抽象方法
	{
		System.out.println("接口A");
	}
	public void printB()
	{
		System.out.println("接口B");
	}
	public void printC()
	{
		System.out.println("接口C");
	}
}
public class TestAbstract 
{
	public static void main(String[] args) 
	{
		D d =new D();	//實例化子類對象
		d.printA();
		d.printB();
		d.printC();
	}
}

祝大家健健康康,快快樂樂。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章