Java學習----day6——(1)面對對象程序設計進階篇之繼承篇

  1. 繼承基本概念

    extends,很好理解嘛,就是兒子繼承父親的屬性;所以父類有什麼,子類就有什麼屬性。
    
  2. 繼承實現的限制問題

    規範:只能一次繼承一個父類!即在過程中一對一繼承!
    
  3. 子類實例化的過程

    當使用new關鍵字實現類的時候,先調用父類的構造器再調用子類構造器。(因爲對象初始化就是構造函數的調用過程)
    
  4. 方法的覆寫

    private<default<public
    private——>public
    default——>public
    就是直接在子類中定義同樣的方法名並且擴大或者不動(父類>=子類)方法訪問權限,進而具體實現。
    private——>default不算是方法的覆寫
    
  5. super關鍵字

    代表父類的意思,和this的意義差不多吧,但是需要注意的是,this在子類中找不到對於的方法和變量,將去父類中尋找。
    
package com.Example.chapter05;

 /**
 1. @author Administrator 
 2. @function : 繼承的初步理解 
*/ 
public class ExtendsDesign {
     public static void main(String[] args) {
        Student guangwei=new Student();
        guangwei.setName("光唯");
        guangwei.setAge(23);
        guangwei.setSex("男");
        System.out.println(guangwei.getName()+"\t\t"+guangwei.getAge()+"\t\t"+guangwei.getSex());
    }

}
class Person{
    private String  name;
    private int age;
    private String  sex;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

}
class Student extends Person{

}
  1. 抽象類abstract
package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月26日 下午9:53:27
  * @function : 抽象類的瞭解 
*/ 
public class AbstractDesign {
 public static void main(String[] args) {
    Demo2 A=new Demo2();
    A.outPut();
}
}
abstract class Demo{
    private int age=0;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    /*************抽象類********************/
    public abstract void outPut();

}
class Demo2 extends Demo{

    @Override
    public void outPut() {
        // TODO Auto-generated method stub
        System.out.println("Demo2繼承抽象類Demo去實現實例化");
    }

}
    抽象類相當於“模板”,提供一個模板供子類去實現。       
  1. 有抽象方法的類必須是抽象類
  2. 抽象類和抽象方法都必須用abstract修飾
  3. 抽象方法不能具體實現
  4. 抽象類需要子類去實例化

   我們通過了解抽象類來和普通類進行區別一下,抽象類無非是需要abstract進行修飾,並且有抽象方法的類一定是抽象類。抽象類不一定必須要有抽象方法。

4.接口interface

接口是一種特殊的類;
package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月26日 下午10:07:55
  * @function : 接口的理解 
*/ 
public class InterfaceDesign {
 public static void main(String[] args) {
    Test t=new Test();
    System.out.println(t.getAge()+"\t"+t.getSex());

}
}
class Test implements Demo1,Demo2{

    @Override
    public int getSex() {
        // TODO Auto-generated method stub
        return sex;
    }

    @Override
    public int getAge() {
        // TODO Auto-generated method stub
        return age;
    }

}
interface Demo1{
    public  static final int age=20;
    public  abstract int getAge();
}
interface Demo2{
     public  static final int sex=0;
     public  abstract int getSex();
}
在接口中,變量必須爲全局(static)常量(final);
方法必須爲抽象方法;與繼承不同的是可以多重接入接口;(最重要的是常量和方法默認和要求必須是public權限)

5. 對象的多態性(——–>多種形態)

    1.方法的覆寫
    (要把握覆寫和實現的區別,抽象類不能叫做覆寫)
    2.上下轉型   
    對象是new出的在於堆內存中部分,
      對象向上轉(數據類)型:父類類型 標識符=子類對象
      對象向下轉(數據類)型:子類類型 標識符=(子類類型)父類對象(顯示轉換類型)
      對象在向下轉型必須先向上轉型;
package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月27日 上午11:29:15
  * @function : 主要是看重多態性的表現。上轉型和下轉型 
*/ 
public class DifferentVisionDesign {
   public static void main(String[] args) {
    A a=new B();
    a.outPut();
    B b=(B)a;
    b.outPut();
}
}
class A{
    public void outPut(){
        System.out.println("A類在此"+"\n---------------------------");
    }
}
class B extends A{
    public void outPut(){
        System.out.println("B類在此"+"\n---------------------------");
    }
}
  1. 常見設計模式

    1.首先無疑是抽象類和接口的使用,他們先制定標準再給子類(extends,inmplements)具體實現。
    2.制定標準
    

    這裏寫圖片描述

package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月27日 上午11:52:55
  * @function : 制定標準 
  *             1.電腦接收USB接口
  *             2.USB分爲盤和打印機  
*/ 
public class DesignMode {
   public static void main(String[] args) {   
    Computer worker=new Computer();
    worker.start(new UDevice());
    worker.start(new Printer());
}
}
class Computer{
    public void start(USB device){
        device.work();
        device.finish();
    }
}
interface USB{
    public  abstract void work();
    public  abstract void finish();
}
class UDevice implements USB{

    @Override
    public void work() {
        // TODO Auto-generated method stub
        System.out.println("U盤開始工作"+"\n--------------------------");
    }

    @Override
    public void finish() {
        // TODO Auto-generated method stub
        System.out.println("U盤停止工作"+"\n--------------------------");
    }

}
class Printer implements USB{

    @Override
    public void work() {
        // TODO Auto-generated method stub
        System.out.println("打印機開始工作"+"\n--------------------------");
    }

    @Override
    public void finish() {
        // TODO Auto-generated method stub
        System.out.println("打印機停止工作"+"\n--------------------------");
    }

}
 3.工廠模式(產生一個工廠類,在裏面拿具體實例)
 問題展示:
package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月27日 下午12:21:39
  * @function : 工廠類理解 
*/ 
public class FactoryDesign { 
    public static void main(String[] args) {
        Personk instance=null;
        instance=new man();
        instance.say();
        instance=new woman();
        instance.say();     
    }
}
class Personk{
    public void say(){

    }
}
class man extends Personk{

    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("男人說話女人不要插嘴");
    }

}
class woman extends Personk{

    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("女人說話男人不要插嘴");
    }

}

這裏寫圖片描述

 所以很容易發現哦,在主方法中,每次去實例化一個類都要單獨去實現才能調用方法;而且這個實例完全是可以使用類似於單例模式(解決構造方法私有化);
package com.Example.chapter05;
 /**
  * @author Administrator 
  * @date : 2017年3月27日 下午12:21:39
  * @function : 工廠類理解 
*/ 
public class FactoryDesign { 
    public static void main(String[] args) {
        Personk instance=null;
        instance=new Factory().getInstacne("man");  
        instance.say();
    }
}
class Factory{
    public Personk instance=null;
    public Personk getInstacne(String classname){
        if(("man").equals(classname)){
            this.instance=new man();         
        }else if(("woman").equals(classname)){
            this.instance=new woman();
        }
        return this.instance;
    }
}
class Personk{
    public void say(){

    }
}
class man extends Personk{

    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("男人說話女人不要插嘴");
    }

}
class woman extends Personk{

    @Override
    public void say() {
        // TODO Auto-generated method stub
        System.out.println("女人說話男人不要插嘴");
    }

}
4.代理模式
  1. Object類詳解

  2. 包裝類的作用以及自動裝箱和拆箱的操作

  3. 匿名內部類
  4. final關鍵字

    就此定義爲終結者。end of everything!一經定義不得修改!他可以用來修飾類。
    

    11.instanceof關鍵字

    判斷哪個對象是否屬於哪個實例;
    對象 instanceof 類名 ——>boolean類型值
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章