天天看點

Java 入門 之面向對象2

Java重寫和重載

重寫是子類對父類允許通路的方法進行重新編寫,傳回值和形參不能變。

即外殼不變核心重寫

方法重寫 的規則:

1.參數清單必須與被重寫方法完全相同

2.傳回值類型可以不同,但必須是父類方法傳回值的派生類

3.通路權限不能比父類被重寫的方法權限低

4.父類成員方法隻能被子類成員重寫

5,final方法不能被重寫

6.static不能被重寫,但可以被重新聲明

7,構造方法不能被重寫

當需要在子類中調用父類的被重寫方法時,要用super關鍵字

```java
package java學習.重寫和重載;

class Animal{
    public void move(){
        System.out.println("動物可以移動");
    }
}
class Dog extends Animal{
    public void move(){
        super.move();//應用super類
        System.out.println("狗可以跑");
    }
}

public class Override {
    public static void main(String[] args) {

        Animal a = new Animal();
        a.move();

        System.out.println();

        Dog c = new Dog();
        c.move();

        System.out.println();

        Animal b = new Dog();
        b.move();

    }
}
           
Java 入門 之面向對象2

重載:是一個類裡面,方法名字相同,參數不同,傳回值不同

每個重載的方法必須有獨一無二的參數清單

最常用的是構造器重載

重載的規則:

1.被重載的方法 必須 改變參數清單(個數或類型不一樣)

2. 被重載的方法可以改變傳回類型

3,被重載的方法可以改變通路修飾符

4,被重載的方法可以聲明新的或更廣的檢查異常

5.方法能在一個類,或一個子類中被重載

package java學習.重寫和重載;

public class Overloading {
    public int test(){
        System.out.println("test1");
        return 1;
    }

    public void test(int a){
        System.out.println("test2");
    }

    public String test(int a ,String s){
        System.out.println("test3");
        return "resulttest3";
    }

    public String test(String s,int a){
        System.out.println("test4");
        return "resulttest4";
    }

    public static void main(String[] args) {
        Overloading o = new Overloading();
        System.out.println(o.test());
        System.out.println();
        o.test(1);
        System.out.println();
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}
           
Java 入門 之面向對象2

Java多态

多态是:同一個行為有多個不同表現形式或形态

多态就是一個接口,使用不同執行個體執行不同操作

多态的優點:

1.消除類型之間的耦合關系

2.可替換性

3.可擴充性

4.接口性

5.靈活性

6.簡化性

多态存在的三個必要條件:

1.繼承

2.重寫

3.父類引用指向之類對象 Parent p = new Child();

package java學習.多态;

public class Variety {
    public static void main(String[] args) {
        show(new Cat());
        show(new Dog());
        Animal a = new Cat();
        a.eat();
        Cat c = (Cat) a;
        c.work();

    }
    
    public static  void  show(Animal a) {
        a.eat();

        if (a instanceof Cat) {
            Cat c = (Cat) a;
            c.work();
        } else if (a instanceof Dog) {
            Dog c = (Dog) a;
            c.work();
        }
    }
    }
    abstract class Animal{
        abstract void eat();
    }
    
     class Cat extends  Animal{

        @Override
        public void eat() {
            System.out.println("吃魚");
        }
        public void work(){
            System.out.println("抓老鼠");
        }
    }
     class Dog extends Animal{

        @Override
        void eat() {
            System.out.println("吃骨頭");
        }
        public void work(){
            System.out.println("看門");
        }
    }
    
           
Java 入門 之面向對象2

Java抽象類

抽象類不能執行個體化對象,是以抽象類必須被繼承,才能使用。(是以在SEI階段決定不要使用抽象類)

Java中抽象類表示的是一種繼承關系,一個類隻能繼承一個抽象類,但一個類可以實作多個接口

package java學習.抽象類;

public abstract  class Employee {
    private String name;
    private String address;
    private int number;
    public  Employee( String name,String address,int number){
        System.out.println("Constructing an Employee");
        this.name = name;
        this.address = address;
        this.number = number;
    }
    public double computePay(){
        System.out.println("Inside Employee computePay");
        return 0.0;
    }
    public void  mailCheck(){
        System.out.println("Email is check to " + this.name +" "+ this.address);
    }
    public  String toString (){
        return name+" "+address+" "+number;
    }

    public String getName() {
        return name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String newAddress) {
        address = newAddress;
    }

    public int getNumber() {
        return number;
    }
}
           
package java學習.抽象類;

public class Salary extends  Employee {
    private double salary;

    public Salary(String name, String address, int number,double salary) {
        super(name, address, number);
        setSalary(salary);
    }
    public void mainCheck(){
        System.out.println("Within mainCheck of Salary class ");
        System.out.println("Mailing check to " + getName()+ "with salary "+ salary);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary) {
        if (newSalary>=0.0){
            salary = newSalary;
        }
    }

    public double computePay(){
        System.out.println("Computing salary pay for "+ getName());
        return  salary/52;
    }
}
           
package java學習.抽象類;

public class AbstractDemo {
    public static void main(String[] args) {
        //Employee e = new Employee("ZHANGYANA ","CAIHU",43) ;
        /**
         * 抽象類不可初始化
         */
        Salary s = new Salary("tt","usa",4,5300.00);
        Employee e = new Salary("張亞楠","美國",3,5300.00);
        System.out.println("Call mainCheck using Salary refercence --");
        s.mainCheck();

        System.out.println("\n  Call mainCheck using Empolyee refercence -- ");
        e.mailCheck();
    }
}
           
Java 入門 之面向對象2

Java接口

接口是Java程式設計語言中的一個抽象類型,是抽象方法的集合。

一個類通過繼承方法的方式,進而繼承接口的抽象方法。

類描述對象的屬性和方法

接口則包含類要實作的方法

除非實作接口的類是抽象類,否則該類要定義接口的所有方法。

接口不能執行個體化,但可以被實作。

Java中接口類型可以用來聲明一個變量,他們可以成為一個空指針,或者是被綁定的在一個以此接口實作的對象

接口的實作

package java學習.接口;

public interface Animal {
    public void eat();
    public  void  travel();

}
           
package java學習.接口;

public class MammalInt  implements Animal{
    @Override
    public void eat() {
        System.out.println("Mammal eats");
    }

    @Override
    public void travel() {
        System.out.println("Mannal travel");
    }

    public int noOfLegs(){
        return 0;
    }

    public static void main(String[] args) {
        MammalInt m = new MammalInt();
        m.eat();
        m.travel();

    }

}
           

接口的繼承

package java學習.接口;

public interface Sports {
    public void setHomeTeam(String name);
    public void setVisitingTeam(String name);
}
           
package java學習.接口;

public interface Football extends Sports {
    public  void  homeTeamScored(int points);
    public void visitingTeameScored(int points);
    public void endOdQuarter(int quater);
}
           
package java學習.接口;

import org.w3c.dom.events.Event;

public interface Hockey extends Sports, Event {//接口允許多繼承,類不允許多繼承
    public void homeGoalScored();
    public void visitingGoalScored();
    public void endOfPeriod(int period);
    public void overtimePeriod(int ot);
}
           

标記接口

package java學習.接口;

public interface EventListener {
/**
 * 沒有任何方法的接口稱為标記接口
 * 建立标記接口的目的:
 * 1、建立公共的父接口
 * 2、向一個類添加資料類型
 */
}