父类
package copa.test;
public class Animal {
private String name;
private int age;
public Animal(String myName, int myAge) {
name = myName;
age = myAge;
System.out.println("Animal-- 进来了");
}
public void eat() {
System.out.println(name + "Animal-- 能吃");
}
public void sleep() {
System.out.println(name + "Animal-- 能睡");
}
public void introduction() {
System.out.println("Animal-- 大家好!我是" + name + ",今年" + age + "岁");
}
}
子类
package copa.test;
public class Dog extends Animal {
/**
* 重写--在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法;
* 参数列表: 一定不能修改;
* 返回类型: 一定不能修改;
* 异常: 可以减少或删除,一定不能抛出新的或者更广的异常;
* 访问(private、public等等): 一定不能做更严格的限制(可以降低限制)
*/
// 重写
public void eat() {
System.out.println("Dog : eat");
}
/**
* 重载--一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同;
* 参数列表: 必须修改;
* 返回类型: 可以修改;
* 异常: 可以修改;
* 访问(private、public等等): 可以修改
*/
// 重载
private void eat(String food) {
System.out.println("Dog在吃" + food);
}
// 重载
public int eat(int count) {
System.out.println("Dog吃了" + count + "顿饭");
return count;
}
// 重载
public int eat(String food, int count) {
System.out.println("Dog吃了" + count + "个" + food);
return count;
}
// 重载
public int eat(int count, String food) {
System.out.println(count + "个" + food + "被Dog吃了");
return count;
}
public Dog(String myName, int myid) {
super(myName, myid);
// TODO Auto-generated constructor stub
/*
*当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法
*要想调用父类中被重写的方法,则必须使用关键字 super。
*/
super.eat();
this.eat();
this.eat("面包");
}
public static void main(String[] args) {
String myName = "huahua--";
int myid = 1;
Dog dog = new Dog(myName, myid);
dog.introduction();
System.out.println("=======这里子类重写了父类,输出:Dog : eat");
// 这里子类重写了父类,输出:Dog : eat
dog.eat();
System.out.println("=======调用重载方法");
// 调用重载方法
dog.eat("馒头+咸菜");
dog.eat(1);
dog.eat("馒头", 3);
dog.eat(3, "馒头");
dog.sleep();
/*
* 父类引用指向子类对象 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。
* 多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。
* 方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现
*/
Animal animal = new Dog(myName, myid);
System.out.println("=======父类引用指向子类对象");
animal.eat();
}
}