package mypackage;//類中只要有一個abstract,則類就必須是abstractpublic abstract class Person{ //當在定義一個類時,其沒有屬性(這個類中沒有定義實例域),實際其沒有任何意義 //在這里,沒有任何東西可以描述一個人 //當然,可以返回一個空串,表示這個人沒有什么可以描述的 //比如上大街上,找個路人問我要找一個人,別人問你有沒有什么可以描述一個人的,你說沒有,那這個人怎么找 //就是一個空的、虛的、沒有意義的人// public String getDescription()// {// return "the person has nothing";// } //但通常,這不是一個好的辦法 //既然這是一個沒有意義的類,那給其提供一個沒有意義的方法,實際也沒什么意義,還不如不要 //但不要又不太好描述,所有就有了抽象的概念 public abstract String getDescription(); //將一個方法定義為abstract,可以不提供具體的實現,而有子類來實現 //但定義為一個抽象方法后,該類就必須是一個抽象類,需要把類也定義為abstract //abstract類中,同樣還是可以定義具體的實例域和方法的,只不過該類還是不能定義一個對象 //只不過,這樣的做法看起來好像有一點點混亂,既然abstract類沒有意義,怎么又會有代表這個類的屬性 //但好處是,可以將大量重復的、相同的“東西”放到abstract類中進行統一的處理 //這里的“東西”不太好概括,因為很有可能它們和這個類本身沒有什么關系,只是找到一個可以統一處理的地方 //所以往后就有了接口的說法 PRivate String m_sName = "Pernson"; public String getName() { return m_sName; }}//定義一個學生,學生也是一個人,同時,它有自己的身份“學生”class Student extends Person{ String m_sIdentify = "student"; public String getDescription() { return m_sIdentify; }}需要注意,abstract類是不能定義對象的,會報錯。
但其變量和繼承中一樣,是可以引用子類對象的。
//abstract類是不允許定義一個對象的,因為它沒有實際意義// Person p = new Person();// System.out.println(p.getDescription()); //abstract類不允許定義對象,其子類只要實現了就是可以的 Student st = new Student(); Person p = st;//并且,abstract類變量同樣是可以引用子類對象的 System.out.println(st.getDescription()); System.out.println(p.getDescription()); System.out.println(p.getName());
新聞熱點
疑難解答