重载,继承,重写和多态的区别:
1)继承是子类获得父类的成员。
2)重写是继承后重新实现父类的方法。
3)重载是在一个类里一系列参数不同名字相同的方法。
4)多态则是为了避免在父类里大量重载引起代码臃肿且难于维护。
网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法。
下面的例子包含了这四种实现:
class Triangle extends Shape {
public int getSides() {
return 3;
}
}
class Rectangle extends Shape {
public int getSides(int i) {
return i;
}
}
public class Shape {
public boolean isSharp(){
return true;
}
public int getSides(){
return 0 ;
}
public int getSides(Triangle tri){
return 3 ;
}
public int getSides(Rectangle rec){
return 4 ;
}
public static void main(String[] args) {
Triangle tri = new Triangle();
System.out.println(“Triangle is a type of sharp? ” + tri.isSharp());
Shape shape = new Triangle();
System.out.println(“My shape has ” + shape.getSides() + ” sides.”);
}
}
红色是重载,绿色是重写,蓝色是继承,粉红是多态
注意Triangle类的方法是重写,而Rectangle类的方法是重载。
比较红色的和粉红的部分就可以发现多态对重载的优点:如果用重载,则在父类里要对应每一个子类都重载一个取得边数的方法;如果用多态,则父类只提供取得边数的接口,至于取得哪个形状的边数,怎样取得,在子类里各自实现(重写)。
问题内容: 这是我遇到的一个测试练习问题,希望您能帮助我理解概念 让Hawk成为Bird的子类。假设某个类有两个重载的方法void foo(Hawk h)和void foo(Bird b)。在声明Bird x = new Hawk()之后,将在调用foo(x)中执行哪个版本; 这是我到目前为止的代码,有人可以向我解释为什么foo(bird b)被执行吗? 问题答案: Java执行重载解析以选择方法
本文向大家介绍Java和多重继承,包括了Java和多重继承的使用技巧和注意事项,需要的朋友参考一下 Java不支持多重继承。这意味着一个类不能扩展一个以上的类。因此,跟随是非法的 但是,一个类可以实现一个或多个接口,这帮助Java摆脱了多重继承的可能性。extend关键字仅使用一次,并且父接口在逗号分隔的列表中声明。例如,如果Hockey接口同时扩展了Sports和Event,它将被声明为- 下面
“编写一个名为clsWorker的超类和子类clsHourlyWorker和clssalariedworker。每个工人都有一个名字和一个工资率。编写计算每个员工周薪的方法computePay(int hours)。小时工按实际工作小时数获得小时工资,如果小时数最多为40小时。如果小时工工作超过40小时,则按时间半支付超出部分。受薪工人得到40小时的小时工资,无论实际小时数是多少。为继承编写一个测
问题内容: 为了完全理解如何解决Java的多重继承问题,我有一个经典的问题需要澄清。 可以说我有类此有子类和我需要做一个类,从扩展和自既是一只鸟和一匹马。 我认为这是经典的钻石问题。从我能理解经典的方式来解决,这是使,和类接口,并实现从他们。 我想知道是否还有另一种方法可以解决仍然可以为鸟和马创建对象的问题。如果有一种能够创造动物的方法,那也很棒,但不是必须的。 问题答案: 你可以为动物类(生物学
假设我有类,它有子类和,我需要创建一个类,它扩展自和,因为既是鸟也是马。 我想这就是经典的钻石问题。据我所知,解决这个问题的经典方法是将、和类作为接口,并从它们实现。 我想知道是否有另一种方法来解决这个问题,在这个方法中,我仍然可以为鸟和马创建对象。如果有一种方法也能创造动物,那将是伟大的,但不是必要的。
我在一个有这些类的项目中工作: 这些coures类具有其他方法和属性。 如果可以的话,它应该能够使用来自Square和RedRectangle的方法,否则它应该使用来自Rectangle的方法,并且它应该迫使开发人员从他自己的代码中为所有在Square和RedRectangle中被重写的方法编写代码。 我实际上知道这是多重继承,Java不支持它,但我需要实现这种行为。 我试图使用Square和Re