代碼塊 內(nèi)部類 繼承 多態(tài)
技術(shù)
代碼塊
代碼塊:在對象創(chuàng)建之前就優(yōu)先會被調(diào)用
修飾符 {
預(yù)先執(zhí)行的內(nèi)容
}
類里面可以有多個代碼塊
執(zhí)行順序和出現(xiàn)的先后順序相同
盡量不要在類里面寫對個代碼塊內(nèi)部類
定義一個類 可以在多個地方定義
1.單獨(dú)創(chuàng)建一個文件管理一個類
2.直接在文件里面 類A的上面和下面創(chuàng)建
3.直接在某個類A內(nèi)部創(chuàng)建一個類
一個類A依附于另一個類B-
繼承 A extends B
獲得父類的方法和屬性 并且需要添加自己的屬性和方法
Java里面只能單繼承炊汹,變向的多繼承
Person
Student
Teacher所有的類都是直接或者間接繼承于Object類
當(dāng)調(diào)用子類的一個方法時逃顶,如果沒有就會到父類里面去查找
如果在子類里面需要調(diào)用父類的方法或者顯示調(diào)用父類的屬性
使用super
什么情況下需要在一個方法里面調(diào)用super的對應(yīng)方法?如果一個方法需要完成一個功能以政,又不能單獨(dú)完成,必須要父類做相應(yīng)的工作
1.父類做完之后 子類再操作
2.子類做點(diǎn)事情之后 在調(diào)用父類去完成如果子類里面需要重新實(shí)現(xiàn)父類的方法 就需要重寫
@Override如果父類有自定義構(gòu)造方法
子類的構(gòu)造方法里必須顯示調(diào)用父類的構(gòu)造方法如果父類有內(nèi)部類
子類中有同名的內(nèi)部類
那么父類中的內(nèi)部類就被屏蔽了
如果非要使用父類中的內(nèi)部類 只能使用全類名 Person.inners 多態(tài) polymorphic
1.同一個方法 多種實(shí)現(xiàn) 在不同的子類中有不同的實(shí)現(xiàn)
2.如果有繼承關(guān)系:子類的對象可以使用父類變量接收
類型的向上轉(zhuǎn)換
技術(shù)運(yùn)用
- 代碼塊
int age ;
{
age = 20;
System.out.println("代碼塊 age = "+age);
}
{
age = 30; //會覆蓋前一個代碼塊賦的值
System.out.println("代碼塊 age = "+age);
}
靜態(tài)代碼塊 會優(yōu)先調(diào)用
static {
// age = 20; 靜態(tài)代碼塊里面不能調(diào)用成員變量和實(shí)例方法
System.out.println("靜態(tài)代碼塊");
}
- 內(nèi)部類
1.靜態(tài)內(nèi)部類
String view;
//在顯示一個視圖前 必須告訴系統(tǒng)這個視圖的具體位置
public void show(LayoutParams layout){
System.out.println("視圖:"+view+"顯示出來了");
System.out.println("left:"+layout.leftMergin+"top"+layout.topMergin+"right"+layout.rightMergin+"bottom"+layout.bottomMergin);
}
//定義一個內(nèi)部類 用于管理相對布局的具體布局屬性
public static class LayoutParams{
float leftMergin;
float topMergin;
float rightMergin;
float bottomMergin;
public LayoutParams(float leftMergin,float topMergin,float rightMergin,float bottomMergin){
this.bottomMergin = bottomMergin;
this.leftMergin = leftMergin;
this.rightMergin = rightMergin;
this.topMergin = topMergin;
}
}
//創(chuàng)建一個相對布局 容器視圖
RelativeLayout r1 = new RelativeLayout();
r1.view = "分享按鈕";
//顯示這個視圖
//準(zhǔn)備好這個 視圖的布局屬性
//1.
// RelativeLayout.LayoutParams params =new RelativeLayout.LayoutParams(20,20,20,20);
// r1.show(params);
//使用匿名對象 只需要使用一次
r1.show(new RelativeLayout.LayoutParams(20,20,20,20));
2.靜態(tài)內(nèi)部類 可以訪問外部類的屬性和方法
class TestInner{
int a ;
int b;
Inner inner;
class Inner{
//非靜態(tài)的內(nèi)部類 可以訪問外部類的屬性和方法
public Inner(){
a=20;
b=30;
show();
}
}
public void show(){
System.out.println("a = "+a+" b = "+b);
}
public void test(){
inner = new Inner();
}
}
TestInner ti = new TestInner();
ti.test();
- 繼承和多態(tài)
定義一個Person2類
import java.util.ArrayList;
public class Person2{
String name;
int age;
public Person2(String name,int age){
this.age = age;
this.name = name;
}
public void walk(){
System.out.println("走路");
}
public void eat(){
System.out.println("吃飯");
}
}
定義一個Servent類表示公務(wù)員繼承Person2類
public class Servant extends Person2 {
float salary;
int count;
public Servant(String name,int age,float salary,int count){
super(name,age);
this.count = count;
this.salary = salary;
}
public void show1(){
System.out.println("Servant{" +
"salary=" + salary +
", count=" + count +
", name='" + name + '\'' +
", age=" + age +
'}');
}
public void walk(){
System.out.println("hahha走路");
}
public void eat(){
System.out.println("hahahahh吃飯");
}
}
定義一個Staff類表示職工繼承Person2類
public class Staff extends Person2{
float salary;
String tec;
public Staff(String name,int age,float salary,String tec){
super(name,age);
this.tec = tec;
this.salary = salary;
}
public void show2(){
System.out.println("Staff{" +
"salary=" + salary +
", tec='" + tec + '\'' +
", name='" + name + '\'' +
", age=" + age +
'}');
} public void walk(){
System.out.println("erieri走路");
}
public void eat(){
System.out.println("etoeit吃飯");
}
}
創(chuàng)建多個職員和公務(wù)員 放到一個數(shù)組里面
將數(shù)組里面所有人的信息輸出:體現(xiàn)多態(tài) 子類的對象使用父類變量接收
class Test {
public static void main(String[] args) {
ArrayList<Person2> person2s = new ArrayList<>();
Person2 p1 = new Servant("小王", 20, 9434, 39);
Person2 p2 = new Servant("小孫", 29, 3553, 23);
Person2 p3 = new Servant("小李", 22, 2345, 46);
person2s.add(p1);
person2s.add(p2);
person2s.add(p3);
Person2 p4 = new Staff("張三",38,21355,"Android開發(fā)");
Person2 p5 = new Staff("李四",28,3546,"搬磚");
Person2 p6 = new Staff("王五",18,2356,"洗盤子");
person2s.add(p4);
person2s.add(p5);
person2s.add(p6);
for (Person2 person2:person2s)
{
if(person2 instanceof Servant){
Servant a1 = (Servant)person2;
a1.show1();
a1.walk();
a1.eat();
}
else {
Staff b1 = (Staff)person2;
b1.show2();
b1.walk();
b1.eat();
}
}
}
}
心得
今天總算感覺要稍微輕松一點(diǎn)了,不像前兩天寫demo時那么累寸五,基礎(chǔ)的一些知識學(xué)起來確實(shí)不是很難,但是要運(yùn)用在一起寫demo的時候梳杏,感覺就不是那么輕松了。就像前兩天寫demo叛溢,自己寫的話真的無法下手劲适,不知道怎么開始,更不知道在哪些地方用什么樣的方法好霞势,就連聽起來也感覺費(fèi)力斑鸦。所以我認(rèn)為要想能寫出好程序的話巷屿,真的得多寫東西,不然光學(xué)基礎(chǔ)知識還是不如實(shí)踐啊嘱巾。