抽象類
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();
}
|
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();
}
}
祝大家健健康康,快快樂樂。