Understanding Java Inheritance and Interfaces in Vehicle Class Hierarchies
Explore the concepts of inheritance and interfaces in Java, focusing on vehicle-related classes like `Car`, `Motorcycle`, `Truck`, and `Jeep`. Learn how subclasses can inherit attributes and methods from parent classes, utilize constructors, and override methods for customized behavior. Discover the differences between hiding and overriding methods, encapsulation principles, and interface implementation to design flexible and maintainable code. This guide is essential for understanding object-oriented programming principles in real-world applications.
Understanding Java Inheritance and Interfaces in Vehicle Class Hierarchies
E N D
Presentation Transcript
Vehicle Car 類別的繼承
Vehicle Car Motorcycle Truck SportsCar Jeep 類別的繼承
類別的繼承 class Car { private int engineNum; private int color; public void setNum(int num){engineNum = num;} public void setColor(int color){ this.color = color;} public void printVehicle(){ } }
類別的繼承 class 子類別 名稱 extends 父類別名稱 { ....//額外的成員資料和方法 } class Nissan extends Car { private double price; public Nissan (int num, int color , double price) { } public void printNissan() { } }
類別的繼承 • 子類別不能存取父類別宣告成private 的成員資料和方法。 • 父類別的建構子不屬於類別的成員, 所以子類別並不能繼承父類別的建構 子,只能呼叫父類別的建構子。
類別的繼承 class Car { ....... public static void printName(){...}//隱藏 ....... public void printCar(){...}//覆寫 } class Nissan extends Car { ....... public Static void printName(){....} ....... public void printCar() {....} } 覆寫(override)與 隱藏(hide)父類別的方法
類別的繼承 隱藏父類別的成員資料 class Car { ….. public int color; ….. } class Nissan extends Car { private String color; ….. }
類別的繼承 使用父類別的建構子 class Car extends Vehicle // Car類別宣告 { private String name; // 隱藏父類別的成員變數 private int engineNo; private int doors; // 幾門 public Car(String name, int no, int doors) { super(name, no); // 呼叫父類別的建構子 ……… } public void printVehicle() { ………. super.printVehicle(); System.out.println("名稱(父): " + super.name); System.out.println("引擎號碼(父): " + super.engineNo); ……….. } } class Vehicle // Vehicle類別宣告 { // 成員資料 public static int count; // 車輛數 public int engineNo; // 引擎號碼 public String name; // 名稱 // 建構子 public Vehicle(String name, int no) {…………………} // 成員方法: 顯示車輛資料 public void printVehicle() {…………………} }
常數與抽象類別 • final class Customer extends Person • { • ..... • } • class Person • { • ..... • final char getName(){return nmae;} • final int getAge(){return age;} • final void setName(char c){ name = c; } • final void setAge(int age) { this.age = age; } • }
<<abstract>> Shape +x:double +y:double area() 常數與抽象類別 • abstract class Shape • { • public double x; • public double y; • abstract void area(); • } • class Circle extends Shape • { • public double r; • public Circle(double x, double y, double r) { ..... } • public void area() • { System.out.println("圓面積: " + 3.1416*r); } • } Circle +r:double +area()
多形 • class Circle extends Shape • { • ....... • public void area(){.....} • ....... • } • class Rectangle extends Shape • { • ....... • public void area(){.....} • ....... • } • class Triangel extends Shape • { • ....... • public void area(){.....} • ....... • } Circle Shape.area() ch6_3 Shape.area() Rectangle Shape.area() Triangle
隨堂練習 Abstract<<Test>> MidTerm +max : int +min : int +avg : float MidTerm m = new MideTerm(90, 45, 67.8); Quiz q = new Quiz(70, 34, 78.5); Final f = new Final(87, 64, 76.3); Test t = m; t.print(); t = q; t.print(); t = f; t.print(); print() print() Quiz Final print() print()
隨堂練習 Abstract<<Triangle>> T1 +a : int +b : int +c : int T1 t1 = new T1(6, 6, 6); T2 t2 = new T2(3, 4, 5); T3 t3 = new T3(8, 8, 12); T t = t1; t.area(); t = t2; t.area(); t = t3; t.area(); +area : float area() T3 T2 +area : float +area : float
import java.lang.*; • public class Ch1_4_1 • { // 主程式 • public static void main(String[] args) • { // 顯示訊息 • System.out.println(Math.sqrt(9)); • } • }
<<interface>> IPrice Car getPrice():double -price:double -name:String +getPrice():double +getName():String 類別的繼承 Java的介面
類別的繼承 介面的宣告 public interface 介面名稱 { final 資料型態 常數值 ; ….. 傳回值型態 介面方法(參數列) ; ….. } Interface IArea { final double PI=3.1415926; void area(); }
類別的繼承 類別實作介面 Class 類別名稱 implements 介面名稱1、介面名稱2 { ….. //實作介面的方法 } Class Circle implements IArea { …… public void area() { System.out.println(“圓面積 :”+PI*r*r); } }
<<interface>> IArea Circle -x:double -y:double -r :double area() +area() 類別的繼承 Ch_9_2_2
<<interface>> IArea <<interface>> IShow area() show() 類別的繼承 Ch_9_2_3 在類別實作多個介面 Circle -x:double -y:double -r :double +area() +show()
Vehicle -engineNo:int -name:String -price:double Car +print() <<interface>> IPrint print() -door:int +print() 類別的繼承 類別架構與介面 Ch_9_2_4
<<interface>> IArea <<interface>> IShape area() perimeter() 類別的繼承 Ch9_3 Circle -x:double -y:double -r :double +area() +perimeter()
類別的繼承 介面的多重繼承 interface 介面名稱 extends 繼承介面1,繼承介面2 { …..//額外的常數和方法 } interface Ishape extends IArea, IShow { void perimeter(); }
<<interface>> IShow <<interface>> IArea <<interface>> IShape show() perimeter() area() Circle -x:double -y:double -r :double +area() +show() +perimeter() 類別的繼承 Ch_4_2
Student Class Student { private int stdNo; … public float score; public Student(…) { ….} public int getNo() {…..} public String getName() {…..} public String getAddress() {…..} } Class GraduateStudent { private String department; public GraduateStudent(…) { super.stdNo = no; …… } public int getNo() { System.out.println(“No” + super.getNo()); …… } }
<<interface>> I1 <<interface>> I2 sum() printout() IArray FloatArray -buf: int [] -no : int -buf: float[] -no : int +sum() +printout() +sum() 練習
<<interface>> IArea area() Triangle Triangle1 Triangle2 Triangle3 -a: Point -b : Point -c: Point +area() +printout() +area() +area() +area() 練習