JAVA自學筆記(4)

YUNNEN發表於2020-05-30

發現JAVA的有趣

Day1 繼承不是"繼承"

1.0 繼承的格式

 

public class FU {
    public void method()
    {
        System.out.println("Good night!");
    }
}
public class ZI extends FU {

}
public class Practice {
    public static void main(String[] args) {
        ZI zi=new ZI();
        zi.method();
    }
}

列印結果:

Good night!

2.0 繼承中成員變數的訪問特點

 

public class FU {
    int num=10;
    int numfu=100;
    public void methodfu()
    {
        System.out.println(num);
    }
}
public class ZI extends FU {
    int num=20;
    int numzi=200;
    public void methodzi()
    {
        System.out.println(num);
    }
}
public class Practice {
    public static void main(String[] args) {
        ZI zi=new ZI();
        FU fu=new FU();
        System.out.println(zi.numfu);//100
        System.out.println(zi.numzi);//200
        //第一種
        System.out.println(zi.num);//20;
        System.out.println(fu.num);//10
        //第二種
        zi.methodzi();//20
        fu.methodfu();//10
        zi.methodfu();//10
    }
}

3.0  區分子類方法中重名的三種

 

public class ZI extends FU {
   int num=20;
   public void methodzi()
   {
       int num=100;
       System.out.println(num);//100
       System.out.println(this.num);//20
       System.out.println(super.num);//10
   }
}

 4.0 方法的覆蓋重寫

繼承中方法的覆蓋重寫 (典型事例)

收舊手機!報廢手機!手機換盆!換剪子!換菜刀!

public class Oldphone {
    public void call()
    {
        System.out.println("didi~主人的電話來啦");
    }
    public void send()
    {
        System.out.println("叮咚! 有一條新資訊");
    }
    public void show()
    {
        System.out.println("顯示來電");
        System.out.println("來電鈴聲");
    }
}
public class Newphone extends Oldphone {
    @Override
    public void show(){
        super.show();
        System.out.println("顯示姓名");
        System.out.println("顯示頭像");
    }
}
public class Phone {
     public static void main(String[] args) {
        Oldphone oldphone=new Oldphone();
        Newphone newphone=new Newphone();
        System.out.println("老手機的功能:");
oldphone.call(); oldphone.send(); oldphone.show(); System.out.println(
"============="); System.out.println("新手機的功能:"); newphone.call(); newphone.send(); newphone.show(); } }

列印結果:

 

老手機的功能:
didi~主人的電話來啦
叮咚! 有一條新資訊
顯示來電
來電鈴聲
=============
新手機的功能:
didi~主人的電話來啦
叮咚! 有一條新資訊
顯示來電
來電鈴聲
顯示姓名
顯示頭像

5.0 繼承中構造方法的訪問特點

 6.0 Java 繼承的特點

 

6.0 繼承的案例 (群主發紅包啦 快去搶!)

首先 對案例的分析

搶紅包的實現

public class User {
    private int money;
    private String name;
    public User(){};
    public User(int money, String name) {
        this.money = money;
        this.name = name;
    }
    public void show()
    {
        System.out.println("我叫"+getName()+" 我還有:"+getMoney());
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
import java.util.ArrayList;

public class Owner extends User{
    public Owner() {
        super();
    }
    public Owner(int money, String name) {
        super(money, name);
    }
    public ArrayList<Integer> send(int sendmoney,int count)//發多少 發幾份
    {
        ArrayList<Integer> list=new ArrayList<>();
        int totalmoney=super.getMoney();//當前餘額
        if(totalmoney<sendmoney) 
        {
            System.out.println("餘額不足!");
            return list;
        }
        super.setMoney(totalmoney-sendmoney);
        int ave=sendmoney/count;
        int mod=sendmoney%count;//餘數放在最後一個紅包
        for(int i=0;i<count-1;i++)
        {
            list.add(ave);
        }
        list.add(ave+mod);
        return list;    
    }
    
    
       
}
import java.util.ArrayList;
import java.util.Random;

public class Member extends User {

    public Member() {
        super();
    }
    public Member(int money, String name) {
        super(money, name);
    }
    public void receive(ArrayList <Integer> list)
    {
         int index=new Random().nextInt(list.size());//0~list.size()-1
         int datamoney=list.remove(index);
         int leftmoney=super.getMoney();//原有的金額
         super.setMoney(datamoney+leftmoney);
    }
}
import java.util.ArrayList;

public class Hongbao {
    public static void main(String[] args) {
        Owner owner=new Owner(100,"方時赫");
        Member one=new Member(0,"金碩珍");
        Member two=new Member(0,"金南俊");
        Member three=new Member(0,"閔玧其");
        owner.show();
        one.show();
        two.show();
        three.show();
        System.out.println("===============");
        ArrayList<Integer> list=owner.send(20, 3);
        one.receive(list);
        two.receive(list);
        three.receive(list);
        owner.show();
        one.show();
        two.show();
        three.show();
    }
}

列印結果:

我叫方時赫 我還有:100
我叫金碩珍 我還有:0
我叫金南俊 我還有:0
我叫閔玧其 我還有:0
===============
我叫方時赫 我還有:80
我叫金碩珍 我還有:6
我叫金南俊 我還有:8
我叫閔玧其 我還有:6

 

Day3 抽象???

1.0 抽象類的方法

舉個列子778吧

public abstract class Animals {
     public abstract void eat();
}
public class Dog extends Animals{
    public  void eat(){
        System.out.println("狗吃骨頭");
    }
}
public class Cat extends Animals{
    public  void eat(){
        System.out.println("貓吃魚");
    }
}
public class Practice {
    public static void main(String[] args) {
        Cat cat=new Cat();
        Dog dog=new Dog();
        cat.eat();
        dog.eat();
    }
}

列印結果:

貓吃魚
狗吃骨頭

2.0 抽象類的使用的注意事項

Day 4 歡迎來到介面的世界!

1.0 介面的定義

 

2.0 介面的抽象方法的定義

3.0 介面的抽象方法的使用

 

public interface Myinter {
     public abstract void method1();
     public abstract void method2();
     public abstract void method3();
}
public class Interfaced implements Myinter {//實現類

    @Override
    public void method1() {
        System.out.println("這是第一個方法!");
    }

    @Override
    public void method2() {
        System.out.println("這是第二個方法!");
    }

    @Override
    public void method3() {
        System.out.println("這是第三個方法!");
    }

}
public class Practice {
    public static void main(String[] args) {
        Interfaced inte=new Interfaced();
        inte.method1();
        inte.method2();
        inte.method3();
    }
}

列印結果:

這是第一個方法!
這是第二個方法!
這是第三個方法!

4.0 介面的預設方法的定義

 

5.0 介面的預設方法的使用

 

public interface Myinter {
     public abstract void method1();
     public abstract void method2();
     public abstract void method3();
     public default void method4()
     {
         System.out.println("新增加的方法!");
     }
}
public class Interfaced implements Myinter {//實現類

    @Override
    public void method1() {
        System.out.println("這是第一個方法!");
    }

    @Override
    public void method2() {
        System.out.println("這是第二個方法!");
    }

    @Override
    public void method3() {
        System.out.println("這是第三個方法!");
    }

    @Override
    public void method4() {
        System.out.println("這是覆蓋重寫的 方法!");
    }
     
}
public class Practice {
    public static void main(String[] args) {
        Interfaced inte=new Interfaced();
        inte.method1();
        inte.method2();
        inte.method3();
        inte.method4();
    }
}

列印結果:

這是第一個方法!
這是第二個方法!
這是第三個方法!
這是覆蓋重寫的 方法!

6.0 介面的靜態方法的定義

7.0 介面的靜態方法的使用

 

public interface Myinter {
    public static void methodstatic()
    {
        System.out.println("這是一個靜態方法");
    }

}
public class Myinterface implements Myinter {
}
public class Main {
    public static void main(String[] args) {
        //錯誤寫法  Myinterface.methodstatic();
        Myinter.methodstatic();
    }
}

列印結果:

這是一個靜態方法

8.0 介面的私有方法的定義

 

public interface Myinter {
   public default void method1()
   {
       System.out.println("這是一個預設方法1");
       method3();
   }
    public default void method2()
    {
        System.out.println("這是一個預設方法2");
        method3();
    }
    private  void method3()
    {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }


}

 

public interface Myinter {
   public static void method1()
   {
       System.out.println("這是一個預設方法1");
       method3();
   }
    public static void method2()
    { 
        System.out.println("這是一個預設方法2");
       method3();
    }
    private static  void method3()
    {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }


}

 9.0 介面中常量定義和使用

10.0 介面的小結

11.0 繼承父類並實現多個介面

 

12.0 介面的多繼承

相關文章