Java面向對象特征

封裝

private int age(私有 類名稱 屬性名稱)。特別注意的是數組也屬于java類。private 可以封裝類、屬性、方法。

繼承

1、子類可以直接繼承父類的操作,并且子類還可以繼續擴充自己的功能。

package practice;
class A{
    private String name;
    private int age;
    
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name ;
    }
    public void setAge(int age){
        this.age = age;
    }
    public int getAge(){
        return this.age;
    }
}
class B extends A{
    private String school;
    public void setSchool(String school){
        this.school = school;
    }
    public String getSchool(){
        return this.school;
    }
}
public class exte {
    public static void main(String [] args){
        A a = new A();
        B b = new B();
        a.setName("張三");
        a.setAge(23);
        b.setSchool("大學也");
        System.out.println("姓名:"+a.getName()+",年齡:"+a.getAge()+",學校:"+b.getSchool());
    }
}

2、Java不允許多重繼承,允許多層繼承。

//此為錯誤繼承
class A{
}
class B{
}
class C extends A,B{
}
//這是對的
class A{
}
class B extends A{
}
class C extends B{
}

3、子類構造調用一定會先執行父類操作,顯式/隱式操作

package practice;
class A1{
    private String name;
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return this.name;
    }
}
class B1 extends A1{
      /*public void fun(){
  System.out.println(name);    //這里用super.name調用也不對,私有屬性只能在本類使用,父類不可使用
}   */      //此方法操作錯誤,B1的name隱式繼承樂A1的name,不能直接對私有屬性進行操作,而可以隱式繼承
}
//可以這樣理解把A1當作父親,B1當作孩子,
public class exten {
    public static void main(String [] args){
        B1 b = new B1();
        b.setName("張三");
        System.out.println(b.getName());
    }
}

super() 操作/this()操作;沒有無參構造時使用super()

package practice;
class D{
    public D(){
        System.out.println("A");
    }
}
class E extends D{
    public E(){
        super();   //若父類有無參構造,加不加都可以,子類對象實例化時會默認調用父類的無參構造
        System.out.println("B");
    }
}
public class ex1 {
    public static void main(String [] args){
        new E();
    }
}
-----------------------------------------------------------------------------------
package practice;
class D{
    public D(String title){
        System.out.println("A");
    }
}
class E extends D{
    public E(String title){
        super(title);  // this()當前類中查找,extends()父類查找,向父類查找
        System.out.println("B");
    }
}
public class ex1 {
    public static void main(String [] args){
        new E("d");
    }
}

多態

兩種形式描述:
方法的多態性:方法的重載,同一個方法名稱,會根據傳入參數的類型及個數的不同執行不同的方法體;方法的覆寫:同一個方法會根據子類的不同,實現不同的功能。
對象的多態性:指的是發生在繼承關系類中,子類和父類的轉換。
向上轉型:父類 父類對象 = 子類實例; //自動完成
向下轉型:子類 子類對象 = (子類)父類實例。 //強制完成
向上轉型:

class A{
    public void print(){
        System.out.println("A");
    }
}
class B extends A {
    public void print(){
        System.out.println("B");
    }
}
------------------------------------------------------
//向上
public class Duo{
    public static void main(String [] args){
        A a = new B();
        a.print();
    }
}
-------------------------------------------------------
//向下
public class Duo{
    public static void main(String [] args){
        A a = new B();
        B b = (B)a;
        b.print();
    }
}

向上轉型可以實現參數的統一

class A{
    public void print(){
        System.out.println("A");
    }
}
class B extends A {
    public void print(){
        System.out.println("B");
    }
}
class C extends A{
    public void print(){
        System.out.println("C");
    }
}
public class Duo{
    public static void main(String [] args){
      //子類均可以用父類接受
        A a1 = new B();
        A a2 = new C();
        a1.print();
        a2.print();
    }
}

向下轉型:指的是父類要調用子類自己的特殊的方法。

class A{
    public void print(){
        System.out.println("A");
    }
}
class B extends A {
    public void print(){
        System.out.println("B");
    }
    public void fun(){
        System.out.println("fun");
    }
}
public class Duo{
    public static void main(String [] args){
        A a1 = new B();
        B b = (B)a1;
        b.fun();
    }
}

擴充方法

class A{
    public void print(){
        System.out.println("A");
    }
}
class B extends A {
    public void print(){
        System.out.println("B");
    }
    public void fun(){
        System.out.println("fun");
    }
}
public class Duo{
    public static void main(String [] args){
        funa(new B());
    }
    public static void funa(A a){
        B b = (B)a;
        b.fun();
    }
}

兩個沒有關系的類的對象強制向下轉型時所帶來的異常
Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
at Duo.main(Duo.java:14)

class A{
    public void print(){
        System.out.println("A");
    }
}
class B extends A {
    public void print(){
        System.out.println("B");
    }
}
public class Duo{
    public static void main(String [] args){
        A a = new A();   //A a = new B();
        B b = (B)a;
        b.print();
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容