JAVA里没有多继承,一个类之能有一个父类。 而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。举例说明: //父类 public class Father{ //父类有一个打孩子方法 public void hitChild(){} } //子类1 public class Son1 extends Father{ //重写父类打孩子方法 public void hitChild(){ System.out.println("为什么打我?我做错什么了!"); } } //子类2 public class Son2 extends Father{ //重写父类打孩子方法 public void hitChild(){ System.out.println("我知道错了,别打了!"); } } //子类3 public class Son3 extends Father{ //重写父类打孩子方法 public void hitChild(){ System.out.println("我跑,你打不着!"); } } //测试类 public class Test{ public static void main(String args〔〕){ Father father; father = new Son1(); father.hitChild(); father = new Son2(); father.hitChild(); father = new Son3(); father.hitChild(); } }
都调用了相同的方法,出现了不同的结果!这就是多态的表现!
方法的多态性有两个方面: 1、子类重写父类方法,这个主要在调用的时候注意就好了,关键是子类父用的时候调用的时候要注意。这个前面大家都说得很清楚,自己随便写个例子打印一下就行了。 2、就是同一个类中的一个方法的多态。也就是说同一个方法名可以有多个写法,调用的时候根据方法的参数能准确调用。eg. public String A(int a) {}; public String A(){};这两个方法在同一个类中出现,就属于多态,要注意的是参数初始化问题带来的可能不能准确调用的问题就行了。
public void draw() {}
public void erase() {}
}class Circle extends Shape {
public void draw() {
System.out.println("Circle.draw()");
}
public void erase() {
System.out.println("Circle.erase()");
}
} class Square extends Shape {
public void draw() {
System.out.println("Square.draw()");
}
public void erase() {
System.out.println("Square.erase()");
}
} public class Test62
{
public static void main(String... args) {
Shape s = new Circle();
s.draw(); //输出: Circle.draw() s = new Square();
s.draw(); //输出: Square.draw()
}
}
在编译时s唯一可以确定的就是要调用是draw()方法,但是具休要执行的方法体是哪一个没有确定。在执行时根据方法的后期绑定确定s所指向的是new Circle()的内存空间确定draw()的方法体是Circle里的draw()方法体。所以会执行其对应的draw()方法。同样对于
s = new Square();
s.draw(); //输出: Square.draw()
也是如此。
X:
这里可以是很多数据类型 你看输出 你放int double string char 数组 对象 都可以输出。
这就是方法的多态。
而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的方法(例如方法print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在调用这个相同的方法print()的时候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是调用相同的方法)会有不同的结果。举例说明: //父类
public class Father{
//父类有一个打孩子方法
public void hitChild(){}
}
//子类1
public class Son1 extends Father{
//重写父类打孩子方法
public void hitChild(){
System.out.println("为什么打我?我做错什么了!"); }
}
//子类2
public class Son2 extends Father{
//重写父类打孩子方法 public void hitChild(){
System.out.println("我知道错了,别打了!"); }
}
//子类3
public class Son3 extends Father{
//重写父类打孩子方法 public void hitChild(){
System.out.println("我跑,你打不着!"); }
}
//测试类
public class Test{
public static void main(String args〔〕){
Father father;
father = new Son1();
father.hitChild();
father = new Son2();
father.hitChild();
father = new Son3();
father.hitChild();
}
}
都调用了相同的方法,出现了不同的结果!这就是多态的表现!
1、子类重写父类方法,这个主要在调用的时候注意就好了,关键是子类父用的时候调用的时候要注意。这个前面大家都说得很清楚,自己随便写个例子打印一下就行了。
2、就是同一个类中的一个方法的多态。也就是说同一个方法名可以有多个写法,调用的时候根据方法的参数能准确调用。eg. public String A(int a) {}; public String A(){};这两个方法在同一个类中出现,就属于多态,要注意的是参数初始化问题带来的可能不能准确调用的问题就行了。