java学习笔记(五)----super用法,final用法,抽象类,接口
子類不會繼承父類的構造方法,在子類的構造方法中可使用super(參數列表)調用父類的構造方法。
class Person
{ String name;
? int age;
? public Person();
? public Person(String name,int age)
? { this.name=name;
??? this.age=age;
? }
? public void getInfo()
?{ System.out.println("name="+name+",age="+age);}
}
class Student extends Person
{ public String school="unknow"
? public Student()
? { super();}
? public Student(String name,int age)
? {? super(name, age)}
? public Student(String name,int age,String school)
? { this(name,age);? //此處用this 調用其它的構造函數? public Student(String name,int age)
??? // super(name,age);????? 此處用super就沒有意義了
??? this.school=school;
??? super.getInfo(); //調用父類的getInfo()
? }
? public void getInfo()? //重寫父類中的方法
?{ System.out.println("school="+school+",name="+name+",age="+age)}
? public void study()
? { }??
}
//? 1.super()和this()調用語句不能同時在一個構造函數中出現
//? 2.super()和this()調用語句只能作為構造函數中的第一句出現????
class TestStudent
{ public static void main(String[] args)
? {? Student st=new Student("zhangshan",20,"清華大學")
???? st.getInfo()
? }
}
-----------------------
final用法
1.final 加在類前這個類不允許被繼承
2.final 加在成員變量前,成員變量為常量,不允許再被賦值. (1)final String x="abc"; (2) final String x;
? x="abc"? //x="abc"必須放在構造函數中,而且重載的構造函數都得寫上x="abc";
3.方法被定義為final,在子類中方法就不允許被復蓋,只能繼承
static 作用:用static定義的變量,可不用創建對象直接用類名進行調用? Abc.x
class Abc{
? public static String x="abc"
}
class Abc{
? public static final String x="abc"
? public Abc(){ x="abc" } //錯,因為x已經被定義成靜態的了,所以final定義的常量就不能在構造函中賦值了,必須在定義時初使化。
}
System.out.println (Float.MAX_VALUE);打印出最大的浮點小數
---------------------------
抽象類(abtract)
? java中可以定義一些不含方法體的方法,它的方法體的實現交給該類的子類根據自己的情況去實現,這樣的方法就是抽象方法,包含抽象方法的類就叫抽象類。
--抽象類必須用abstract關鍵字來修飾;抽象方法也必須用abstract來修飾。抽象類中所有的類必須為抽象的方法
--抽象類不能被實例化,也就是不能用new關鍵字去產生對象。
--抽象方法只需聲明,而不需實現。
--含有抽象方法的類必須被聲明為抽象類,抽象類的子類必須覆蓋所有的抽象方法后才能被實例化,否則這個子類還是個抽象類。
abstract class A
{? private int i=1; //在抽象類中可以定義變量
?? abstract int aa(int x,int y);
?? abstract void bb();
?? public void cc() //在抽象類中可以定義一般的方法
?? {System.out.println(i);}
}
class B extends A
{ int aa(int x,int y){ return 1; } //方法中必須有一個反回值
? void bb(){}
?
? public static void main(String[] args)
? { B b=new B();
??? System.out.println(b.aa(1,2));
??? b.cc();?
? }?
}
接口(interface)
??? 如果一個抽象類中的所有方法都是抽象的,我們就可以將這個類用另外一種方式來定義,也就是接口定義。接口是抽象方法和常量值的定義的集合,從本質上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現。
--接口中的成員都是public訪問類型的。接口里的常量默認是用public static final標識的,所以接口中的變量,都是全局靜態常量。
--我們可以定義一個新的接口用extends關鍵字去繼承一個已有的接口
--我們也可以定義一個類用implements關鍵字去實現一個接口中的***所有方法***(包括這個接口的父接口中的方法)
----我們還可以去定義一個抽象類用implements關鍵字去實現一個接口中定義的***部分方法***。
--? 一個類可以繼承一個父類的同時,實現一個或多個接口,extends關鍵字必須位于implements關鍵字之前。
interface Runner
{ public static final int ID=1;或? int ID=1 // 定義常量,可將public static final 省略,定義的也是常量,因為接口中只能定義常量。
? void run();
}
interface Animal extends Runner //繼承Runner的接口
{? void breathe();
?}
class Fish implements Animal
{ public void run(); //因為接口里聲明的類默認是public,而在繼承時子類必須比父類的訪問權限要高,所以不能直接寫void run(),如果不寫public編繹時會出錯。?
? { System.out.println("fish is swimming");
?? }
? public void breathe()
? { System.out.println("fish is bubbling");??
? }
? public static void main(String[] args)
? { Fish f=new Fish();
??? int j=0;
??? j=Runner.ID;? //去引用Runner中的常量id,因為id默認是static型的,所以用Runner直接調用。
??? j=f.ID;
j=Fish.ID;? //因為Fish類,繼承父類,所以可以這樣的引用
??? f.iD=2; //這句錯,因為id是常量,不能賦值
? }
}
abstract class LandAnimal implements Animal //因為LandAnimal沒有繼承Animal的所有方法,所以在類前必須聲明為抽象類。
{ public void breathe(){}; //?????有一個問題,這樣定義一個類以后,因為是抽象類不能定義對象,然而作一個這個類的繼承以后,編譯出錯,還有抽象類里面為什么加{},原程序在我的文檔中,Aaa.java
}???????????????????????? //問題解決了,抽象類的確不能創建對象,這沒錯,而要是繼承這個類,前面的所有繼承都須要被重寫,而前面說到的{}則是必須要加到里面的,一個抽象類繼承一個接口,抽象類中的方法必須加{},下面寫一個繼承它的程序,但要是把它再定義成抽象方法,可以這樣寫,abstract? public void breathe() ;
class LAL extends LandAnimal
{ public void breathe(){
?? System.out.println("hhhhhhhhhhhhhhhhh");
?? }
? public voic run(){};???? //子類繼承父類是抽象類或接口必須繼承父類的所有的方法
?}??? // 這樣就沒問題了
?????????????
class Student extends Person implements Runner //假設前面有個Person類,這個就是即繼承Person這個類,而且還實現了implements這個接口,但extends必須在implements的前面.
{? public void run();
?}
interface Flyer
{ void fly();}
class Bird implements Runner,Flyer? //一個類可以同時繼承多個接口
{? public void run(){}
?? public void fly(){}
}
總結
以上是生活随笔為你收集整理的java学习笔记(五)----super用法,final用法,抽象类,接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java学习笔记(四)----对象、数组
- 下一篇: java学习笔记(六)----对象的类型