打卡~~
Topic source不明白。
【含有抽象方法的类必须定义为抽象类,无法实例化】,
然而,代码里却又
Income[] incomes = new Income[] {new SalaryIncome(7500), new RoyaltyIncome(12000) };
明明是抽象类,却被实例化了。为什么?而且,这种编译也能通过的,搞不明白
回楼上:
因为这里实际上并没有对Income类进行实例化,Income[]数组中实际上实例化的是 new SalaryIncome() 和 new RoyaltyIncome(),Income类只是变量类型而非实例类型。
就好像上面的教程当中有Person类为抽象类,Student类和Teacher类则为具体的子类,Person p = new Student()这样写是没有问题的,因为本质上实例化的是Student而不是Person类,
这里也是一样,代码中并没有new Income(),所以没有问题。
回复 楼上 明明是抽象类,却被实例化了。为什么? 这里是通过 匿名子类 创建 对象的 后面章节 内部类 会讲到
仔细看 后面 有对 {}
想一想 之前,你 创建对象的时候 后面 有 {} 的么???
我去 成功 被楼上带偏了
Income[] incomes = new Income[] {new SalaryIncome(7500), new RoyaltyIncome(12000) };
这不就是创建了一个 Income 类型的数组么???
根据多态 原理 父类引用指向了 子类 对象
我去 之前是真的白 才会被 带偏...
创建数组 还可以进一步 简化 ,这个 Income 是普通类啊 哪里是抽象类了....
Income[] incomes ={ new Income(3000), new Salary(7500), new StateCouncilSpecialAllowance(15000) };
最后,打字 风格 也会被人病垢 么? 算了,懒得理他...
又咬不到...
- 1
- 2
用户5527594890