多态是指同一对象在不同时刻表现出来的不同形态。
前提:有继承/实现关系;有方法重写;有父类引用指向子类对象。
二、成员访问特点成员变量:编译看左边,执行看左边
成员方法:编译看左边,执行看右边
说明:成员方法有重写,成员变量没有
三、优缺点优点:提高了程序的扩展性
表现:定义方法的时候,使用父类型作为参数,在使用的时候使用具体子类型进行 *** 作。
缺点:不能使用子类特有的功能。
四、多态中的转型向上转型:从子到父,父类引用指向子类对象
范例:Animal a = new Cat();
向下转型:从父到子,父类引用转为子类对象
范例:Cat c = (Cat)a;
五、案例要求:采用多态的思想实现猫和狗的案例并在测试类中测试。
思路:
1.定义动物类:成员变量(姓名,年龄),构造方法(无参,带参),成员方法(get/set方法,吃饭())
2.定义猫类:继承动物类,构造方法(无参,带参),成员方法(重写吃饭())
3.定义狗类:继承动物类,构造方法(无参,带参),成员方法(重写吃饭())
4.定义测试类:写代码测试
Animal类的代码:
package DuoTai; public class Animal { private String name; private int age; public Animal() { } public Animal(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void eat(){ System.out.println("动物吃东西"); } }
Cat类代码:
package DuoTai; public class Cat extends Animal{ public Cat() { } public Cat(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("猫吃鱼"); } }
Dog类代码:
package DuoTai; public class Dog extends Animal{ public Dog() { } public Dog(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("狗吃骨头"); } }
测试类:
package DuoTai; public class Demo { public static void main(String[] args) { Animal a = new Cat(); a.setName("加菲"); a.setAge(5); System.out.println(a.getName() + "," + a.getAge()); a.eat(); System.out.println("-----------"); a = new Cat("波斯",6); System.out.println(a.getName() + "," + a.getAge()); a.eat(); System.out.println("-----------"); Animal b = new Dog(); b.setName("斗牛"); b.setAge(7); System.out.println(b.getName() + "," + b.getAge()); b.eat(); System.out.println("-----------"); b = new Dog("旺财",8); System.out.println(b.getName() + "," + b.getAge()); b.eat(); } }抽象类 一、抽象类概述
在Java中,一个没有方法体的方法应该被定义为抽象类,而类中如果有抽象方法,该类必须定义为抽象类。
范例:public abstract class Animal{
public abstract void eat();
}
二、抽象类的特点1.抽象类和抽象方法必须用abstract 修饰
2.抽象类中不一定有抽象方法但是有抽象方法的一定是抽象类
3.抽象类不可以实例化,但是可以参照多态的方式,通过子类对象实例化(抽象类多态)
4.抽象类的子类要么重写所有抽象方法要么本身是抽象类
三、抽象类的成员特点1.成员变量:可以是变量也可以是常量。
2.构造方法:有构造方法,用来子类访问父类数据的初始化,但不能用来实例化。
3.成员方法:可以是抽象方法(限定子类必须完成某些动作)。也可以是非抽象方法(提高代码的复用性)。
四、案例要求:采用抽象类的思想实现猫和狗的案例并在测试类中测试。
思路:
1.定义动物类:成员变量(姓名,年龄),构造方法(无参,带参),成员方法(get/set方法,吃饭())
2.定义猫类:继承动物类,构造方法(无参,带参),成员方法(重写吃饭(){……})
3.定义狗类:继承动物类,构造方法(无参,带参),成员方法(重写吃饭(){……})
4.定义测试类:写代码测试
代码实现:
Animal类的代码:
package MyAbstract; public abstract class Animal { private String name; private int age; public Animal() { } public Animal(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public abstract void eat(); }
Cat类代码:
package MyAbstract; public class Cat extends Animal{ public Cat() { } public Cat(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("猫吃鱼"); } }
Dog类代码:
package MyAbstract; public class Dog extends Animal{ public Dog() { } public Dog(String name, int age) { super(name, age); } @Override public void eat() { System.out.println("狗吃骨头"); } }
测试类:
package MyAbstract; public class Demo { public static void main(String[] args) { Animal a = new Cat(); a.setName("加肥"); a.setAge(5); a.eat(); System.out.println(a.getName() + "," + a.getAge()); System.out.println("-----------"); a = new Cat("波斯",6); a.eat(); System.out.println(a.getName() + "," + a.getAge()); System.out.println("-----------"); Animal b = new Dog(); b.setName("斗牛"); b.setAge(7); b.eat(); System.out.println(b.getName() + "," + b.getAge()); System.out.println("-----------"); b = new Dog("旺财",8); b.eat(); System.out.println(b.getName() + "," + b.getAge()); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)