เขียน Java (ทับ) และการบรรทุกเกินพิกัด (Overload)

Rewrite (แทนที่)

เขียนใหม่เป็น subclass ของขั้นตอนการดำเนินการเพื่อให้สามารถเข้าถึงวิธีการเรียนผู้ปกครองอีกครั้งเขียน! ค่าที่ส่งคืนและพารามิเตอร์จะไม่เปลี่ยนแปลง ว่าเป็นกรณีเดียวกันแกนเขียน!

เขียนใหม่ประโยชน์จาก subclasses ตามต้องการกำหนดเฉพาะเจาะจงในการกระทำของพวกเขา

นั่นคือ subclass ของวิธีการเรียนผู้ปกครองสามารถรับรู้ได้ตามความจำเป็น

ในหลักการเชิงวัตถุเขียนใหม่หมายความว่าคุณสามารถแทนที่วิธีการที่มีอยู่ ตัวอย่างมีดังนี้

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法

      b.move();//执行 Dog 类的方法
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

动物可以移动
狗可以跑和走

ในตัวอย่างข้างต้นจะเห็นได้แม้ B เป็นประเภทสัตว์ แต่มันเป็นวิธีการดำเนินการย้ายระดับสุนัข

เพราะนี่คือที่รวบรวมเวลา แต่การตรวจสอบพารามิเตอร์ชนิดอ้างอิง

อย่างไรก็ตามในเวลาเรียกใช้ชนิดของเครื่องเสมือนจาวา (JVM) ของวัตถุที่ระบุและวิธีการดำเนินงานของวัตถุ

ดังนั้นในตัวอย่างข้างต้นคอมไพเลอร์ที่ได้รับสามารถที่จะประสบความสำเร็จเพราะวิธีการย้ายที่มีอยู่ระดับสัตว์ แต่วิ่งวิ่งเป็นวิธีการสำหรับวัตถุโดยเฉพาะอย่างยิ่ง

พิจารณาตัวอย่างต่อไปนี้:

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      System.out.println("狗可以跑和走");
   }
   public void bark(){
      System.out.println("狗可以吠叫");
   }
}

public class TestDog{

   public static void main(String args[]){
      Animal a = new Animal(); // Animal 对象
      Animal b = new Dog(); // Dog 对象

      a.move();// 执行 Animal 类的方法
      b.move();//执行 Dog 类的方法
      b.bark();
   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

TestDog.java:30: cannot find symbol
symbol  : method bark()
location: class Animal
                b.bark();
                 ^

โปรแกรมจะโยนความผิดพลาดสะสมเพราะไม่มีการอ้างอิงประเภท B วิธีเปลือกสัตว์


วิธีการเขียนกฎ

  • รายการพารามิเตอร์จะต้องตรงเช่นเดียวกับวิธีการที่จะถูกเขียนใหม่;
  • ประเภทกลับต้องถูกเขียนใหม่ทั้งหมดที่มีประเภทการกลับมาของวิธีการเดียวกัน;
  • การเข้าถึงไม่ต่ำกว่าวิธีการเข้าถึงระดับผู้ปกครองแทนที่ ตัวอย่างเช่น: ถ้าระดับผู้ปกครองมีการประกาศที่สาธารณะแล้วแทนที่วิธีนี้ใน subclass ไม่สามารถประกาศเป็นการป้องกัน
  • สมาชิกของชนชั้นปกครองเท่านั้นที่สามารถแทนที่ subclasses ของมัน
  • ประกาศเป็นวิธีสุดท้ายไม่สามารถแทนที่
  • ประกาศเป็นวิธีการคงไม่สามารถเขียนใหม่ แต่สามารถประกาศอีกครั้ง
  • ชั้นผู้ปกครองและ subclass ในแพคเกจเดียวกันประเภทรองสามารถแทนที่ระดับผู้ปกครองของวิธีการทั้งหมดนอกเหนือจากแถลงการณ์ของวิธีการส่วนตัวและครั้งสุดท้าย
  • ซับคลาสและ superclass ไม่ได้เป็นแพคเกจเดียวกันดังนั้นเพียง subclasses สามารถแทนที่การประกาศของวิธีการที่ไม่ใช่สุดท้ายของประชาชนระดับผู้ปกครองและการป้องกันสำหรับ
  • วิธีการแทนที่สามารถโยนยกเว้นใด ๆ ไม่ได้รับคำสั่งโดยไม่คำนึงว่าวิธีการที่ได้รับการเขียนใหม่โยนข้อยกเว้น แต่วิธีการที่ไม่สามารถแทนที่การยกเว้นบังคับโยนใหม่หรือกว้างกว่าการประกาศบังคับเป็นวิธีการแทนที่ข้อยกเว้นมิฉะนั้นคุณจะ
  • คอนสตรัคไม่สามารถเขียนใหม่
  • หากวิธีการที่ไม่สามารถรับมรดกก็ไม่สามารถแทนที่วิธีนี้

การใช้คำหลักที่ซูเปอร์

เมื่อคุณจะต้องมีการเขียนใหม่เพื่อเรียกวิธีการเรียนของผู้ปกครองใน subclass ที่จะใช้คำหลักที่ซุปเปอร์

class Animal{

   public void move(){
      System.out.println("动物可以移动");
   }
}

class Dog extends Animal{

   public void move(){
      super.move(); // 应用super类的方法
      System.out.println("狗可以跑和走");
   }
}

public class TestDog{

   public static void main(String args[]){

      Animal b = new Dog(); // Dog 对象
      b.move(); //执行 Dog类的方法

   }
}

ตัวอย่างข้างต้นรวบรวมผลมีดังนี้

动物可以移动
狗可以跑和走

โอเวอร์โหลด (Overload)

โอเวอร์โหลด (มากไป) อยู่ในระดับภายในวิธีการที่มีชื่อเดียวกัน แต่มีพารามิเตอร์ที่แตกต่างกัน ประเภทผลตอบแทนอาจจะเหมือนหรือต่างกัน

แต่ละวิธีมากเกินไป (หรือคอนสตรัค) จะต้องมีรายการที่ไม่ซ้ำกันของชนิดอาร์กิวเมนต์

ก่อสร้างมากเกินไปเท่านั้น

การบรรทุกเกินพิกัดกฎ

  • วิธีการมากเกินไปต้องเปลี่ยนรายการพารามิเตอร์;
  • วิธีการมากเกินไปสามารถเปลี่ยนประเภทผลตอบแทน;
  • วิธีการมากเกินไปอาจมีการเปลี่ยนแปลงปรับเปลี่ยนการเข้าถึง
  • วิธีการมากเกินไปสามารถประกาศข้อยกเว้นใหม่หรือการตรวจสอบที่กว้างขึ้น;
  • วิธีการที่สามารถจะอยู่ในระดับเดียวกันหรือมากเกินไปในประเภทรอง

ตัวอย่าง

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 "returntest3";
	}	
 
	public String test(String s,int a){
		System.out.println("test4");
		return "returntest4";
	}	
 
	public static void main(String[] args){
		Overloading o = new Overloading();
		System.out.println(o.test());
		o.test(1);
		System.out.println(o.test(1,"test3"));
		System.out.println(o.test("test4",1));
	}
}

ความแตกต่างระหว่างการเขียนมากไป

จุดของความแตกต่าง วิธีการมากเกินไป วิธีการเอาชนะ
รายการพารามิเตอร์ คุณต้องได้รับการแก้ไข จะต้องไม่ได้รับการแก้ไข
ประเภทกลับ คุณสามารถปรับเปลี่ยน จะต้องไม่ได้รับการแก้ไข
ผิดปกติ คุณสามารถปรับเปลี่ยน สามารถลดลงได้หรือถูกลบออกคุณจะต้องไม่โยนข้อยกเว้นใหม่หรือที่กว้างขึ้น
ทางเข้า คุณสามารถปรับเปลี่ยน จะต้องไม่เป็นข้อ จำกัด ที่เข้มงวดมากขึ้น (ไม่ จำกัด สามารถลดลง)