01/10/2018, 08:20

Cách tạo một đối tượng khi chưa biết kiểu

Ở đây mình có bài toán thế này.

class Animal {
	public static legsNum: Number;
	public name: String;

	constructor(name:String) {
		this.name = name;
	}

	hi() {
		console.log('My name is ' + name);
	}
}

class Cat extends Animal {
	public static legsNum = 4;

	hi() {
		super.say();
		console.log('Tao la con meo!');
	}
}

class Chicken extends Animal {
	public static legsNum = 2;

	hi() {
		super.say();
		console.log('Tao la con ga!');
	}
}

/*
Đầu vào là một số con vật gồm mèo và gà nhưng mình chưa phân biệt được, chỉ biết số chân và tên của nó.

Bây giờ cần tạo ra danh sách các động vật đó và sau đó cho nó giới thiệu hi() theo cách của nó.

Input: 
1) name: 'Minh', legsNum: 4 (Animal)
1) name: 'Qúy', legsNum: 2 (Animal)

Output:
My name is Minh, Tao la con meo!
My name is Qúy, Tao la con ga!
*/

Mình mong muốn là sau khi thêm bất cứ 1 con vật khác có số chân khác nhau thì không cần phải sửa đến Animal.

Trần Hoàn viết 10:21 ngày 01/10/2018

abstract nhé:
(Mình không biết dùng Java nên dùng C#, không biết có tác dụng không…)

        public abstract class Animal
        {
            public int legsNum;
            public abstract void hi();
        }
        public class Ga : Animal
        {
            public Ga()
            {
                legsNum = 2;
            }
            public override void hi()
            {
                Console.WriteLine("Ga");
            }
        }
        public class Meo : Animal
        {
            public Meo()
            {
                legsNum = 4;
            }
            public override void hi()
            {
                Console.WriteLine("Meo");
            }
        }
        public static Animal ahjhj(int chan)
        {
            if (chan == 4) return new Meo();
            else return new Ga();
        }
        static void Main(string[] args)
        {
            Console.Clear();
            var a = ahjhj(4);
            var b = ahjhj(2);
            a.hi();
            b.hi();
            Console.WriteLine(a.legsNum);
            Console.ReadKey();
        }

Kết quả:

Meo
Ga
4
Tao Không Ngu. viết 10:33 ngày 01/10/2018

Hi Tu TV.
Theo ý kiến của mình thì việc đặt số chân là static là không hợp lý.
Vì con gà có 1 chân hoặc con mèo 2 chân cũng được.

Tu TV viết 10:28 ngày 01/10/2018

Ý của mình ở đây là mình có input là 1 Animal biết số chân (legsNum) và tên riêng (name) của nó. Bây giờ làm thế nào để tạo ra Cat hay Chicken còn static ko thấy hợp lý thì bạn có thể sửa tùy ý sao cho đúng mục đích là đc

Tao Không Ngu. viết 10:28 ngày 01/10/2018

Hi Tu TV.
Không thể nói “sửa tùy ý sao cho đúng mục đích là đc”.
Lập trình khá giống toán không thể tùy tiện mà cần phải phù hợp logic.
Còn vấn đề của bạn có thể tham khảo từ khóa “factory pattern trong java”.

Tu TV viết 10:21 ngày 01/10/2018

Thank @Phong_Ky_Vo. Chính là factory pattern , đúng thứ mình cần rồi

Code Đại Hiệp viết 10:29 ngày 01/10/2018

Mình thấy khi thêm 1 con vật nếu dùng factory pattern thì vẫn sửa lại phương thức khởi tạo sub class của Class Animals mà

Tao Không Ngu. viết 10:25 ngày 01/10/2018

Hi Xuân Giang.
Cái đó phụ thưộc vào yêu cầu bài toán và thiết kế lớp cha như nào.

Bài liên quan
0