package jicheng; 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; } }
12345678910111213141516171819202122232425262728293031package jicheng; public class Cat extends Animal { public Cat() { } public Cat(String name, int age) { super(name, age); } public void catchMouse() { System.out.println("猫抓老鼠"); } }
12345678910111213141516package jicheng; public class Dog extends Animal { public Dog() { } public Dog(String name, int age) { super(name, age); } public void lookDoor() { System.out.println("狗看门"); } } 123456789101112131415
package com.itheima_11; /* 测试类 */ public class AnimalDemo { public static void main(String[] args) { //创建猫类对象并进行测试 Cat c1 = new Cat(); c1.setName("加菲猫"); c1.setAge(5); System.out.println(c1.getName() + "," + c1.getAge()); c1.catchMouse(); Cat c2 = new Cat("加菲猫", 5); System.out.println(c2.getName() + "," + c2.getAge()); c2.catchMouse(); } }
12345678910111213141516171819 解决了啥?使用继承可以有效实现代码复用,避免重复代码的出现。例如get、set方法就是大家通用的。
package duotai03; public class Animal { private int age; private String name; public Animal() { } public Animal(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void eat(){ System.out.println("动物吃东西"); } }
1234567891011121314151617181920212223242526272829303132package duotai03; public class Cat extends Animal{ public Cat() { } public Cat(int age, String name) { super(age, name); } @Override public void eat() { System.out.println("猫吃鱼"); } } 123456789101112131415
package duotai03; public class Dog extends Animal{ public Dog() { } public Dog(int age, String name) { super(age, name); } @Override public void eat() { System.out.println("狗吃骨头"); } } 123456789101112131415
package duotai03; public class AnimalDemo { public static void main(String[] args) { //无参构造方法 Animal a = new Cat(); a.setAge(10); a.setName("英短"); a.eat(); System.out.println(a.getAge()+a.getName()); //使用带参构造方法 a = new Cat(10,"加菲"); a.eat(); System.out.println(a.getAge()+a.getName()); } }
1234567891011121314151617 解决了啥?可以增强程序的可扩展性及可维护性,使代码更加简洁。
存在的问题父类本身可能是一个具体事务,例如动物类。所以上面的多态的实现是有问题的。下面使用抽象方式实现。
package chouxiang02; public abstract class Animal { private int age; private String name; public Animal() { } public Animal(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //提供抽象方法 public abstract void eat(); }
12345678910111213141516171819202122232425262728293031package chouxiang02; public class Cat extends Animal { public Cat() { } public Cat(int age, String name) { super(age, name); } @Override public void eat() { System.out.println("猫吃鱼"); } } 123456789101112131415
package chouxiang02; public class Dog extends Animal{ public Dog() { } public Dog(int age, String name) { super(age, name); } @Override public void eat() { System.out.println("狗吃骨头"); } } 123456789101112131415
package chouxiang02; public class AnimalDemo { public static void main(String[] args) { Animal a = new Cat(); a.setAge(6); a.setName("测试猫"); System.out.println(a.getAge()+a.getName()); a.eat(); System.out.println("------------"); a = new Cat(10,"英短"); System.out.println(a.getAge()+a.getName()); a.eat(); } }
12345678910111213141516 解决了啥?父类本身可能是一个具体事务,例如动物类。抽象类的实现解决了这个 问题。
package interface02; public interface Jumpping { public abstract void jump(); } 12345
package interface02; public abstract class Animal{ private int age; private String name; public Animal() {} public Animal(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public abstract void eat(); }
123456789101112131415161718192021222324252627282930package interface02; public class Cat extends Animal implements Jumpping{ public Cat() { } public Cat(int age, String name) { super(age, name); } @Override public void eat() { System.out.println("猫吃鱼"); } @Override public void jump() { System.out.println("猫可以跳高了"); } }
12345678910111213141516171819package interface02; public class AnimalDemo { public static void main(String[] args) { Jumpping j = new Cat(); j.jump(); System.out.println("---------"); Animal a = new Cat(); a.setAge(10); a.setName("英短"); System.out.println(a.getAge()+a.getName()); a.eat(); //向下转型,把一个父类对象转为子类对象 ((Cat)a).jump();//由于Animal中没有jump,所以要强转 a = new Cat(10,"加菲"); System.out.println(a.getAge()+a.getName()); a.eat(); System.out.println("---------"); //一般使用这个方式 Cat c = new Cat(); c.setAge(10); c.setName("英短"); c.jump(); c.eat(); } }
1234567891011121314151617181920212223242526272829 解决了啥?接口的出现可以很方便的实现程序的拓展。
相关知识
Java分别采用继承、多态、抽象类、接口实现猫和狗的入门案例
编写Java程序,以继承和多态思想模拟饲养员喂养不同动物的不同行为
Java猫和狗(继承,多态,抽象,接口版)下
多态
Java猫和狗(继承,多态,抽象,接口版)上
Java案例——猫与狗(接口版)
java对抽象类的理解与实践
接口版编写猫和狗
Educoder–Java面向对象 继承和多态综合练习 第1关:练习
多态应用
网址: 分别使用继承、多态、抽象类和接口方式实现动物类需求 https://m.mcbbbk.com/newsview420775.html
上一篇: java宠物之家代码 |
下一篇: 用Java继承实现动物类 |