标签:
1:
/* 猫狗案例 具体事物:猫,狗 共性:姓名,年龄,吃饭 分析:从具体到抽象 猫: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(猫吃鱼) 狗: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(狗吃肉) 因为有共性的内容,所以就提取了一个父类。动物。 但是又由于吃饭的内容不一样,所以吃饭的方法是抽象的, 而方法是抽象的类,类就必须定义为抽象类。 抽象动物类: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(); 实现:从抽象到具体 动物类: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(); 狗类: 继承自动物类 重写吃饭(); 猫类: 继承自动物类 重写吃饭(); */ //定义抽象的动物类 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(); } // 定义具体的狗类 class Dog extends Animal { public Dog() { } public Dog(String name, int age) { super(name, age); } public void eat() { System.out.println("狗吃肉"); } } // 定义具体的猫类 class Cat extends Animal { public Cat() { } public Cat(String name, int age) { super(name, age); } public void eat() { System.out.println("猫吃鱼"); } } // 测试类 class AbstractTest { public static void main(String[] args) { // 测试狗类 // 具体类用法 // 方式1: Dog d = new Dog(); d.setName("旺财"); d.setAge(3); System.out.println(d.getName() + "---" + d.getAge()); d.eat(); // 方式2: Dog d2 = new Dog("旺财", 3); System.out.println(d2.getName() + "---" + d2.getAge()); d2.eat(); System.out.println("---------------------------"); Animal a = new Dog(); a.setName("旺财"); a.setAge(3); System.out.println(a.getName() + "---" + a.getAge()); a.eat(); Animal a2 = new Dog("旺财", 3); System.out.println(a2.getName() + "---" + a2.getAge()); a2.eat(); // 练习:测试猫类 } }
2:
/* 老师案例 具体事物:基础班老师,就业班老师 共性:姓名,年龄,讲课。 分析: 基础班老师 姓名,年龄 讲课。 就业班老师 姓名,年龄 讲课。 实现: 老师类 基础班老师 就业班老师 */ //定义抽象的老师类 abstract class Teacher { // 姓名 private String name; // 年龄 private int age; public Teacher() { } public Teacher(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 teach(); } // 基础班老师类 class BasicTeacher extends Teacher { public BasicTeacher() { } public BasicTeacher(String name, int age) { super(name, age); } public void teach() { System.out.println("基础班老师讲解JavaSE"); } } // 就业班老师类 class WorkTeacher extends Teacher { public WorkTeacher() { } public WorkTeacher(String name, int age) { super(name, age); } public void teach() { System.out.println("就业班老师讲解JavaEE"); } } class AbstractTest2 { public static void main(String[] args) { // 具体的类测试,自己玩 // 测试(多态) // 基础班老师 Teacher t = new BasicTeacher(); t.setName("程又青"); t.setAge(30); System.out.println(t.getName() + "---" + t.getAge()); t.teach(); System.out.println("--------------"); t = new BasicTeacher("程又青", 30); System.out.println(t.getName() + "---" + t.getAge()); t.teach(); System.out.println("--------------"); // 就业班老师 t = new WorkTeacher(); t.setName("李大仁"); t.setAge(27); System.out.println(t.getName() + "---" + t.getAge()); t.teach(); System.out.println("--------------"); t = new WorkTeacher("李大仁", 27); System.out.println(t.getName() + "---" + t.getAge()); t.teach(); } }
3:
/* 学生案例 具体事务:基础班学员,就业班学员 共性:姓名,年龄,班级,学习,吃饭 分析: 基础班学员 成员变量:姓名,年龄,班级 成员方法:学习,吃饭 就业班学员 成员变量:姓名,年龄,班级 成员方法:学习,吃饭 得到一个学员类。 成员变量:姓名,年龄,班级 成员方法:学习,吃饭 实现: 学员类 基础班学员 就业班学员 */ //定义抽象学员类 abstract class Student { // 姓名 private String name; // 年龄 private int age; // 班级 private String grand; public Student() { } public Student(String name, int age, String grand) { this.name = name; this.age = age; this.grand = grand; } 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 String getGrand() { return grand; } public void setGrand(String grand) { this.grand = grand; } // 学习 public abstract void study(); // 吃饭 public void eat() { System.out.println("学习累了,就该吃饭"); } } // 具体基础班学员类 class BasicStudent extends Student { public BasicStudent() { } public BasicStudent(String name, int age, String grand) { super(name, age, grand); } public void study() { System.out.println("基础班学员学习的是JavaSE"); } } // 具体就业班学员类 class WorkStudent extends Student { public WorkStudent() { } public WorkStudent(String name, int age, String grand) { super(name, age, grand); } public void study() { System.out.println("就业班学员学习的是JavaEE"); } } class AbstractTest3 { public static void main(String[] args) { // 基础班测试 // 按照多态的方式测试 Student s = new BasicStudent(); s.setName("林青霞"); s.setAge(27); s.setGrand("1111"); System.out.println(s.getName() + "---" + s.getAge() + "---" + s.getGrand()); s.study(); s.eat(); System.out.println("--------------"); s = new BasicStudent("武鑫", 48, "1111"); System.out.println(s.getName() + "---" + s.getAge() + "---" + s.getGrand()); s.study(); s.eat(); // 就业班测试 } }
4:
/* 假如我们在开发一个系统时需要对员工类进行设计,员工包含3个属性:姓名、工号以及工资。 经理也是员工,除了含有员工的属性外,另为还有一个奖金属性。 请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。 分析: 普通员工类 成员变量:姓名、工号以及工资。 成员方法:工作 经理类: 成员变量:姓名、工号以及工资,奖金属性 成员方法:工作 实现: 员工类: 普通员工类: 经理类: */ //定义员工类 abstract class Employee { //姓名、工号以及工资 private String name; private String id; private int salary; public Employee() {} public Employee(String name,String id,int salary) { this.name = name; this.id = id; this.salary = salary; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } //工作 public abstract void work(); } //普通员工类 class Programmer extends Employee { public Programmer(){} public Programmer(String name,String id,int salary) { super(name,id,salary); } public void work() { System.out.println("按照需求写代码"); } } //经理类 class Manager extends Employee { //奖金 private int money; //bonus 奖金 public Manager(){} public Manager(String name,String id,int salary,int money) { super(name,id,salary); this.money = money; } public void work() { System.out.println("跟客户谈需求"); } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } } class AbstractTest4 { public static void main(String[] args) { // 测试普通员工 Employee emp = new Programmer(); emp.setName("程又青"); emp.setId("czbk001"); emp.setSalary(18000); System.out.println(emp.getName() + "---" + emp.getId() + "---" + emp.getSalary()); emp.work(); System.out.println("-------------"); emp = new Programmer("程又青", "czbk001", 18000); System.out.println(emp.getName() + "---" + emp.getId() + "---" + emp.getSalary()); emp.work(); System.out.println("-------------"); /* emp = new Manager(); emp.setName("李大仁"); emp.setId("czbk002"); emp.setSalary(8000); emp.setMoney(2000); */ //由于子类有特有的内容,所以我们用子类来测试 Manager m = new Manager(); m.setName("李大仁"); m.setId("czbk002"); m.setSalary(8000); m.setMoney(2000); System.out.println(m.getName() + "---" + m.getId() + "---" + m.getSalary() + "---" + m.getMoney()); m.work(); System.out.println("-------------"); // 通过构造方法赋值 m = new Manager("李大仁", "czbk002", 8000, 2000); System.out.println(m.getName() + "---" + m.getId() + "---" + m.getSalary() + "---" + m.getMoney()); m.work(); } }
标签:
原文地址:http://my.oschina.net/u/2001589/blog/509442