Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 3 của 3
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Hỏi về mảng các đối tượng trong Java?

    Giả sử ta có lớp A
    Lớp B,C , D kế thừa lớp A.
    Muốn khai báo một mảng đối tượng lớp A nhưng mỗi phần tử tuơng ứng lại là đối tượng lớp B C D thì khai báo ntn vậy?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ngoctigerstyle
    Giả sử ta có lớp A
    Lớp B,C , D kế thừa lớp A.
    Muốn khai báo một mảng đối tượng lớp A nhưng mỗi phần tử tuơng ứng lại là đối tượng lớp B C D thì khai báo ntn vậy?
    Làm như sau:

    Mã:
    A[] arr = new A[3];A[0]=new B();A[1]=new C();A[2]=new D();
    Tuy nhiên lưu ý một chút là nếu mà việc thiết kế như vậy mà dẫn tới việc bạn phải dùng toán tử instanceof thì đó là 1 thiết kế không tốt (còn nếu không thì không sao).

    Nghĩa là nếu làm như sau thì được:

    Mã:
    package polymorphismdemo; public abstract class Animal {    public abstract void hello();}
    Mã:
    package polymorphismdemo; public class Bee extends Animal {     @Override    public void hello() {        System.out.println("I'm a bee");            }    }

    Mã:
    package polymorphismdemo; public class Bird  extends Animal {     @Override    public void hello() {        System.out.println("I'm a bird");            }    }
    Mã:
    package polymorphismdemo; public class Rabbit extends Animal {     @Override    public void hello() {        System.out.println("I'm a rabbit");     } }
    Mã:
    package polymorphismdemo; public class Demo {    public static void main(String[] args) {        Animal[] animals = new Animal[3];        animals[0]=new Bee();        animals[1]=new Bird();        animals[2]=new Rabbit();                for (Animal animal:animals) {            animal.hello();        }    }}
    Còn nếu làm như sau đây thì là có vấn đề:

    Mã:
    package polymorphismdemo; public abstract class Animal {    public abstract void hello();}
    Mã:
    package polymorphismdemo; public class Bee extends Animal {     @Override    public void hello() {        System.out.println("I'm a bee");            }        public void fly() {        System.out.println("I'm flying");    }    }
    Mã:
    package polymorphismdemo; public class Bird  extends Animal {     @Override    public void hello() {        System.out.println("I'm a bird");            }        public void fly() {        System.out.println("I'm flying");    }    }
    Mã:
    package polymorphismdemo; public class Rabbit extends Animal {     @Override    public void hello() {        System.out.println("I'm a rabbit");     }        public void run() {        System.out.println("I'm running");    }}
    Mã:
     package polymorphismdemo; public class Demo {    public static void main(String[] args) {        Animal[] animals = new Animal[3];        animals[0]=new Bee();        animals[1]=new Bird();        animals[2]=new Rabbit();                for (Animal animal:animals) {            if (animal instanceof Bee) {                ((Bee)animal).fly();            } else if (animal instanceof Bird) {                ((Bird)animal).fly();            } else if (animal instanceof Rabbit) {                ((Rabbit)animal).run();            }        }    }}
    Dùng instanceof dẫn đến nhược điểm lớn là khi nào mà thêm một class con của Animal thì lại phải sửa vào class Demo.
    Java có hỗ trợ đặc tính đa hình (polymorphism) giúp tránh những cái switch, if phức tạp và gò bó, chính vì vậy nên nếu mà dùng tính đa hình rồi mà vẫn còn phải dùng switch, if, instanceof và ép kiểu (downcast) như vậy thì cần xem xét lại có cái gì đó không ổn.

    Lưu ý thêm: tiêu đề đặt chung chung, không tốt cho cộng đồng tham khảo.
    Bạn nên đặt tiêu đề là: Làm thế nào để khai báo mảng các đối tượng khác lớp nhưng cùng kế thừa một lớp chung.
    Tuy hơi dài nhưng mà dễ tham khảo.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •