java之多态实例一
1,解释,多态,即不同对象在引用同一个方法时产生不同的结果。多态是通过重写和重载来实现的。
2,什么是重载的?
在一个类中方法名相同,但是参数的类型和个数不相同
public class User {
public void h(int a ){} public void h(int a,int b){ }
}
方法重载实现的多态性又称静态多态性,是在编译过程中实现的
2,什么叫重写的?
重写是子类中的方法名,返回类型,参数列表与父类中的某个方法完全一致,此时称子类重写了父类的某个方法。使用super关键字可以调用父类的某些方法和成员变量。
父类 public class User {
private String userName;
public User(String name){
this.userName=name;} public String getName(){ return userName; } public void charge(){//收费 }
} 子类 public class MinuteUser extends User{
double unitPrice;
int minutes;
public MinuteUser(String name,double unitPrice,int minutes) { super(name);//调用父类的含参数构造方法 // TODO Auto-generated constructor stub
this.minutes=minutes; this.unitPrice=unitPrice; }
public void charge(){
System.out.println(getName()+“的水费是”+unitPrice*minutes);
}}
3,重写和重载的区别?
方法的重写是子类和父类的关系,方法的重载是同一个类中多个方法的区别。 使用final修饰的方法是不能被重写的只能被重载
。
4,完整代码
public class User {
private String userName;
public User(String name){
this.userName=name;
}
public String getName(){
return userName;
}
public void charge(){//收费
}
}
public class MinuteUser extends User{
double unitPrice;
int minutes;
public MinuteUser(String name,double unitPrice,int minutes) {
super(name);//调用父类的含参数构造方法
// TODO Auto-generated constructor stub
this.minutes=minutes;
this.unitPrice=unitPrice;
}
public void charge(){
System.out.println(getName()+"的水费是"+unitPrice*minutes);
}
}
public class Yearuser extends User {
double mCharge;
public Yearuser(String name,double mCharge) {
super(name);
// TODO Auto-generated constructor stub
this.mCharge=mCharge;
}
public void charge(){//收费
System.out.println(getName()+"的水费是"+this.mCharge);
}
}
public class test_demo1 {
public static void main(String [] args){
Mouse M=new Mouse("老鼠","垃圾");
//Mouse M =new Mouse();
M.eat();
M.sleep();
M.dig();
System.out.println("----------------------");
Panda P=new Panda("熊猫","竹子");
P.eat();
P.sleep();
}
}
public class demo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
User M=new MinuteUser("陈峰",0.8,30);
User Y=new Yearuser("老王",180);
M.charge();
Y.charge();
}
}
5,结果显示:
陈峰的水费是24.0
老王的水费是180.0
6, 采用的含参数构造方法,在实例化的过程中注意参数问题。运行的时候,始终出现的是上一个运行结果,以前也会出现,快速的解决方案就是新建一个测试类,代码复制进去,虽然很笨的方法,但是简单粗暴