抽象類
抽象方法
抽象方法该窗,只聲明而未實(shí)現(xiàn)(也就是說沒有方法體)的方法我們稱為抽象方法弟蚀,所有的抽象方法都需要用abstract關(guān)鍵字聲明。
抽象方法可以只聲明酗失,而不需要方法體义钉。
抽象方法只能存在于抽象類中
抽象類定義:
抽象類和普通類相比,區(qū)別在于抽象類帶有抽象方法所以抽象類也需要用abstract關(guān)鍵字聲明规肴。
抽象類定義規(guī)則:
1.抽象類和抽象方法必須用abstact關(guān)鍵字來修飾捶闸。
2.抽象類不能直接實(shí)例化,也就是不能直接使用new關(guān)鍵字產(chǎn)生對象奏纪。
3.抽象方法定義時(shí),只需要聲明斩启,不需要實(shí)現(xiàn)序调。
4.含抽象方法的類必須被聲明為抽象類,抽象類的子類必須實(shí)現(xiàn)所有的抽象方法后兔簇,才能被實(shí)例化发绢,否則這個(gè)子類還是個(gè)抽象類。
那些類應(yīng)該成為抽象類
類名涉及的范圍很廣的類垄琐。
例如:動物類就不應(yīng)該被初始化边酒,而應(yīng)該讓它的子類被初始化
java小程序
package Day5;
//import com.sun.org.glassfish.gmbal.ManagedObject;
public class Relativelaout {
String view;
//在顯示一個(gè)視圖時(shí)要告訴系統(tǒng)該視圖的位置
public void show(float leftMergin,float topMergin,float rightMergin,float bottomMergin)
{
LayoutParams layoutParams=new LayoutParams(leftMergin,topMergin,rightMergin,bottomMergin);
System.out.println("視圖"+view+"顯示出來了");
System.out.println("left"+leftMergin);
System.out.println("right"+rightMergin);
System.out.println("top"+topMergin);
System.out.println("bottom"+bottomMergin);
}
//定義一個(gè)內(nèi)部類
class LayoutParams
{
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin,float topMergin,float rightMergin,float bottomMergin)
{
this.bottomMergin= bottomMergin;
this.rightMergin= rightMergin;
this.topMergin= topMergin;
this.leftMergin= leftMergin;
}
}
}
class testLayout{
public static void main(String[] args)
{
//創(chuàng)建一個(gè)視圖
Relativelaout rl=new Relativelaout();
rl.view="分享按鈕";
//顯示這個(gè)視圖
//準(zhǔn)備好相關(guān)的數(shù)據(jù)
//
// Relativelaout.LayoutParams perams=new Relativelaout.LayoutParams(20,20,20,20); //生產(chǎn)一個(gè)內(nèi)部類對象
// rl.show(perams);
// //覓名對象,只使用一次
// rl.show(new Relativelaout.LayoutParams(20,20,20,20));
rl.show(20,20,20,20);
Testinner tl=new Testinner();
tl.test();//調(diào)用此方法產(chǎn)生Testinner的內(nèi)部類對象
}
}
class Testinner
{
int a;
int b;
inner Inners;
class inner
{
//非靜態(tài)的內(nèi)部類可以訪問外層類的屬性和方法
public inner()
{
a=20;
b=30;
show();
}
}
public void test()
{
Inners=new inner();
}
public void show()
{
System.out.println(a+b);
}
}
/**
* 繼承 A extends B
* A繼承了父類B的非私有的屬性和方法
* 還可以添加自己的屬性和方法
*
* 所有的類都繼承于Object
* 在子類里調(diào)用父類的方法使用super
*什么時(shí)候需要調(diào)用父類的方法
* 1.父類先操作后再去調(diào)用子類
* 2.
* 如果父類有自定義的構(gòu)造方法
* 子類在構(gòu)造方法里就必須顯示調(diào)用
*/
class Person1{
String name;
int age;
public void walk()
{
}
}
class Person extends Person1
{
int id;
String school;
public void show()
{
System.out.println(name);
}
@Override
public String toString(){
return "student"+"{name"+name+'\''+"age"+age+'\''+"id"+id+'\''+"school"+school;
}
}
class TestEnd
{
// Person1 XW=new Person1();
public static void main(String[] args)
{
Person XW=new Person();
System.out.println(XW.toString());
}
}
/**
* 多態(tài)
* 1.同一種方法 多種實(shí)現(xiàn)=子類可以覆蓋父類的方法
* 2.運(yùn)用多態(tài)時(shí)狸窘,引用類型可以是實(shí)際對象的父類
* 類型的自動向上轉(zhuǎn)換
*/