1. 程式人生 > 其它 >Java(5)_ 內部類&API(

Java(5)_ 內部類&API(

1.引數傳遞

1.1 類名作為形參和返回值(應用)

  • 1、類名作為方法的形參
    方法的形參是類名,其實需要的是該類的物件
    實際傳遞的是該物件的【地址值】
  • 2、類名作為方法的返回值
    方法的返回值是類名,其實返回的是該類的物件
    實際傳遞的,也是該物件的【地址值】
  • 示例程式碼
    class Cat {
        public void eat() {
            System.out.println("貓吃魚");
        }
    }
    class CatOperator {
        public void useCat(Cat c) { //Cat c = new Cat();
            c.eat();
        }
        public Cat getCat() {
            Cat c = new Cat();
            return c;
        }
    }
    public class CatDemo {
        public static void main(String[] args) {
	//建立操作類物件,並呼叫方法
            CatOperator co = new CatOperator();
            Cat c = new Cat();
            co.useCat(c);
            Cat c2 = co.getCat(); //new Cat()
            c2.eat();
        }
    }

1.2 抽象類作為形參和返回值(理解)

  • 抽象類作為形參和返回值
  • 方法的形參是抽象類名,其實需要的是該抽象類的子類物件
  • 方法的返回值是抽象類名,其實返回的是該抽象類的子類物件
  • 示例程式碼:
  abstract class Animal {
        public abstract void eat();
    }
    class Cat extends Animal {
        @Override
        public void eat() {
            System.out.println("貓吃魚");
        }
    }
    class AnimalOperator {
        public void useAnimal(Animal a) { //Animal a = new Cat();
            a.eat();
        }
        public Animal getAnimal() {
            Animal a = new Cat();
            return a;
        }
    }
    public class AnimalDemo {
        public static void main(String[] args) {
//建立操作類物件,並呼叫方法
            AnimalOperator ao = new AnimalOperator();
            Animal a = new Cat();
            ao.useAnimal(a);
            Animal a2 = ao.getAnimal(); //new Cat()
            a2.eat();
        }
    }

1.3 介面名作為形參和返回值(理解)

  • 介面作為形參和返回值
  • 方法的形參是介面名,其實需要的是該介面的實現類物件
  • 方法的返回值是介面名,其實返回的是該介面的實現類物件
  • 示例程式碼
       interface Jumpping {
            void jump();
        }
        class JumppingOperator {
            public void useJumpping(Jumpping j) { //Jumpping j = new Cat();
                j.jump();
            }

            public Jumpping getJumpping() {
                Jumpping j = new Cat();
                return j;
            }
        }
        class Cat implements Jumpping {
            @Override
            public void jump() {
                System.out.println("貓可以跳高了");
            }
        }
        public class JumppingDemo {
            public static void main(String[] args) {
//建立操作類物件,並呼叫方法
                JumppingOperator jo = new JumppingOperator();
                Jumpping j = new Cat();
                jo.useJumpping(j);
                Jumpping j2 = jo.getJumpping(); //new Cat()
                j2.jump();
            }
        }

內部類

2.1 內部類的基本使用(理解)

  • 內部類概念
    • 在一個類中定義一個類。舉例:在一個類A的內部定義一個類B,類B就被稱為內部類
  • 內部類定義格式
    • 格式&舉例:
    
      /*
     格式:
     class 外部類名{
     修飾符 class 內部類名{
     }
     }
     */
      class Outer {
          public class Inner {
          }
      }
    
  • 內部類的訪問特點
    • 內部類可以直接訪問外部類的成員,包括私有
    • 外部類要訪問內部類的成員,必須建立物件
  • 示例程式碼:
     /*
    內部類訪問特點:
    內部類可以直接訪問外部類的成員,包括私有
    外部類要訪問內部類的成員,必須建立物件
    */
      public class Outer {
          private int num = 10;
    
          public class Inner {
              public void show() {
                  System.out.println(num);
              }
          }
    
          public void method() {
              Inner i = new Inner();
              i.show();
          }
      }
    

2.2 成員內部類(理解)

  • 成員內部類的定義位置

    • 在類中方法,跟成員變數是一個位置
  • 外界建立成員內部類格式

    • 格式:外部類名.內部類名 物件名 = 外部類物件.內部類物件;
    • 舉例:Outer.Inner oi = new Outer().new Inner();
  • 成員內部類的推薦使用方案

    • 將一個類,設計為內部類的目的,大多數都是不想讓外界去訪問,所以內部類的定義應該私有化,私有
      化之後,再提供一個可以讓外界呼叫的方法,方法內部建立內部類物件並呼叫。
      class Outer {
    		private int num = 10;
    
    		private class Inner {
    			public void show() {
    				System.out.println(num);
    			}
    		}
    
    		public void method() {
    			Inner i = new Inner();
    			i.show();
    		}
    	}
    
    	public class InnerDemo {
    		public static void main(String[] args) {
    //Outer.Inner oi = new Outer().new Inner();
    //oi.show();
    			Outer o = new Outer();
    			o.method();
    		}
    	}