抽象类—相关操作
-
抽象类定义和使用
-
Animal抽象类
package cn.xiaoge.day09.demo11; /* 抽象方法: 就是加上abstract关键字, 然后去掉大括号, 直接分号结束. 抽象类: 抽象方法所在的类, 必须是抽象类才行.在class之前写上abstract即可. 如何使用抽象类和抽象方法: 1. 不能直接创建new抽象类对象. 2. 必须用一个子类来继承抽象父类. 3. 子类必须覆盖重写抽象父类当中所有的抽象方法. 覆盖重写(实现):去掉抽象方法的abstract关键字, 然后补上方法体大括号. 4. 创建子类对象进行使用. */ public abstract class Animal { // 这就是一个抽象方法, 代表吃东西, 但是具体吃什么(大括号的内容)不确定. public abstract void eat(); // 这是普通的成员方法 // public void normalMethod() { // } }
-
Cat类
package cn.xiaoge.day09.demo11; public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); } }
-
执行路口
package cn.xiaoge.day09.demo11; public class DemoMain { public static void main(String[] args) { // Animal animal = new Animal(); // 错误写法! 不能直接创建抽象类 Cat cat = new Cat(); cat.eat(); } } // 运行结果 猫吃鱼
-
-
抽象类案例
-
MyAbstract抽象类
package cn.xiaoge.day09.demo12; /* 一个抽象类不一定含有抽象方法. 只要保证抽象方法所在的类是抽象类, 即可. 这样没有抽象方法的抽象类, 也不能直接创建对象, 在一些特殊场景下有用途. */ public abstract class MyAbstract { }
-
Fu类
package cn.xiaoge.day09.demo12; public abstract class Fu { public Fu(){ System.out.println("抽象父类构造方法执行"); } public abstract void eat(); }
-
Zi类
package cn.xiaoge.day09.demo12; public class Zi extends Fu { public Zi(){ System.out.println("子类构造方法执行"); } @Override public void eat() { System.out.println("吃饭饭"); } }
-
执行路口
package cn.xiaoge.day09.demo12; public class DemoMain { public static void main(String[] args) { Zi zi = new Zi(); zi.eat(); } } // 运行结果 抽象父类构造方法执行 子类构造方法执行 吃饭饭
-
-
抽象类案例
-
Animal类
package cn.xiaoge.day09.demo13; // 最高的抽象父类 public abstract class Animal { public abstract void eat(); public abstract void sleep(); }
-
Dog类
package cn.xiaoge.day09.demo13; // 子类也是抽象类 public abstract class Dog extends Animal { @Override public void eat() { System.out.println("狗吃骨头"); } // @Override // public void sleep() { // System.out.println("狗睡觉"); // } }
-
Dog2Ha类
package cn.xiaoge.day09.demo13; public class Dog2Ha extends Dog { @Override public void sleep() { System.out.println("嘿嘿嘿..."); } }
-
DogGolden类
package cn.xiaoge.day09.demo13; public class DogGolden extends Dog { @Override public void sleep() { System.out.println("呼呼呼呼..."); } }
-
执行路口
package cn.xiaoge.day09.demo13; public class DemoMain { public static void main(String[] args) { // Animal animal = new Animal(); // 错误 Animal抽象类 // Dog animal = new Dog(); // 错误 Dog抽象类 Dog2Ha dog2Ha = new Dog2Ha(); // 这是普通类, 可以直接new对象. dog2Ha.eat(); dog2Ha.sleep(); System.out.println("====================="); DogGolden dogGolden = new DogGolden(); dogGolden.eat(); dogGolden.sleep(); } } // 运行结果 狗吃骨头 嘿嘿嘿... ===================== 狗吃骨头 呼呼呼呼...
-
-
发红包案例
-
User类
package cn.xiaoge.day09.demo14; public class User { private String name; // 姓名 private int money; // 余额, 也即是当前用户拥有的钱数 public User() { } public User(String name, int money) { this.name = name; this.money = money; } public void show() { System.out.println("我叫:" + this.name + ", 我有" + this.money + "钱"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } }
-
GroupManager类
package cn.xiaoge.day09.demo14; import java.util.ArrayList; public class GroupManager extends User { public GroupManager() { } public GroupManager(String name, int money) { super(name, money); // 调用父类的构造方法 } public ArrayList<Integer> send(int totalMoney, int count) { // 需要一个集合, 用来存储若干个红包金额 ArrayList<Integer> redList = new ArrayList<>(); // 首先看一下群主有多少钱 int leftMoney = super.getMoney(); // 群主当前余额 // 判断群主的余额够不够发这次红包 if (totalMoney > leftMoney){ System.out.println("余额不足请及时充值"); return redList; } // 扣钱, 启示就是重新设置余额 leftMoney -= totalMoney; super.setMoney(leftMoney); // 发红包需要平均拆分成为count份 int avg = totalMoney / count; int mod = totalMoney % count; // 余数, 也就是甩下的零头 // 除不开的零头, 包在最后一个红包当中 // 下面把红包一个一个放在集合当中 for (int i = 0; i < count; i++) { if (count - 1 == i) { redList.add(avg + mod); } else { redList.add(avg); } } return redList; } }
-
GroupMembers类
package cn.xiaoge.day09.demo14; import java.util.ArrayList; import java.util.Random; public class GroupMembers extends User { public GroupMembers() { } public GroupMembers(String name, int money) { super(name, money); } public void receive(ArrayList<Integer> list) { // 从多个红包当中随便抽取一个, 给我自己. // 随机后去一个集合当中的索引编号 int index = new Random().nextInt(list.size()); // 根据索引, 从集合当中删除, 并且得到被删除的红包, 给我自己 int delta = list.remove(index); // 加法 delta += super.getMoney(); // 重写设置回去 super.setMoney(delta); } }
-
执行路口
package cn.xiaoge.day09.demo14; import java.util.ArrayList; public class Demo01SendEnvelope { public static void main(String[] args) { GroupManager manager = new GroupManager("柳岩", 1000); manager.show(); ArrayList<Integer> redList = manager.send(200, 3); manager.show(); System.out.println("=========================="); GroupMembers member1 = new GroupMembers("权志龙1", 1000); GroupMembers member2 = new GroupMembers("权志龙2", 1000); GroupMembers member3 = new GroupMembers("权志龙2", 1000); member1.receive(redList); member2.receive(redList); member3.receive(redList); member1.show(); member2.show(); member3.show(); } } // 运行结果 我叫:柳岩, 我有1000钱 我叫:柳岩, 我有800钱 ========================== 我叫:权志龙1, 我有1066钱 我叫:权志龙2, 我有1066钱 我叫:权志龙2, 我有1068钱
-