标签:变量 多少 技术 判断 remove nts off size def
public abstract class animal { //抽象类 public abstract void eat(); //这是一个抽象方法 public void nomalMethod(){ } }
注意事项:
1. 抽象类不能创建对象,如果创建,编译无法通过而报错。只能创建其非抽象子类的对象。
理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。
2. 抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。
理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。
3. 抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
理解:未包含抽象方法的抽象类,目的就是不想让调用者创建该类对象,通常用于某些特殊的类结构设计。
4. 抽象类的子类,必须重写抽象父类中所有的抽象方法,否则,编译无法通过而报错。除非该子类也是抽象类。
理解:假设不重写所有抽象方法,则类中可能包含抽象方法。那么创建对象后,调用抽象的方法,没有意义。
爷爷、父亲、儿子三类抽象继承关系:
爷爷辈; public abstract class animal { //抽象类 public animal(){ System.out.println("动物类父类构造方法"); } public abstract void eat(); //这是一个抽象方法 public abstract void sleep(); public void nomalMethod(){ System.out.println("正常方法"); } } 父亲辈: public abstract class Cat extends animal { public Cat(){ System.out.println("猫类构造方法"); } @Override public void eat(){ System.out.println("猫吃鱼"); } } 儿子: public class CatFei extends Cat { @Override public void sleep() { System.out.println("嘿嘿嘿的睡觉"); } }
群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则:
1. 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
2. 成员领取红包后,保存到成员余额中。
请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。
public class PocketUser { private String name; private int money; //当前用户的余额 public PocketUser() { System.out.println("用户的无参构造方法"); } //显示一下当前用户有多少钱 public void show(){ System.out.println("用户" + name + "剩余" + money + "元"); } public PocketUser(String name, int money) { System.out.println("用户的有参构造方法"); this.name = name; this.money = money; System.out.println(this.name); } 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; } }
public class PocketManager extends PocketUser { public PocketManager(){ //super(); System.out.println("管理员的无参构造方法"); } public PocketManager(String name, int money) { super(name, money); System.out.println("管理员的有参构造方法"); } 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; //返回一个空集合 } //扣钱 重新设置余额 super.setMoney(leftmoney - totalMoney); //发红包需要平均拆分成count份 int avg = totalMoney / count ; //每份红包的钱数 int mod = totalMoney % count ; //平均分完红包后甩下的零头 //除不开的零头,包在最后一个红包里 //下面把红包一个一个放到红包里 for (int i = 0; i < count - 1; i++) { //减一是要除去最后一个红包 redlist.add(avg); } //最后一个红包的特殊处理 int last = avg + mod; redlist.add(last); //把最后一个红包也放进去 return redlist; } }
public class PocketMember extends PocketUser{ public PocketMember(){}; public PocketMember(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); // 删除的红包就是自己的 //自己本来有多少钱呢 int money = super.getMoney(); //把收来来的钱加上去 super.setMoney(money+delta); } }
public class MainMethod { public static void main(String[] args) { PocketManager m1 = new PocketManager("chris",150); PocketMember one = new PocketMember("joe",5); PocketMember two = new PocketMember("lin",10); PocketMember three = new PocketMember("sea",15); m1.show(); one.show(); two.show(); three.show(); //群主发红包 ArrayList<Integer> redpocket = m1.send(20,3); //三个成员收红包 one.receive(redpocket); two.receive(redpocket); three.receive(redpocket); //再来看看大家还有多少钱 m1.show(); one.show(); two.show(); three.show(); } }
注意事项:
(1)接口当中的抽象方法,修饰符必须是固定的两个关键字:public abstract
(2)这两个关键字修饰符,可以选择性的省略
(3)方法的三要素可以随意定义
(1)接口不能直接使用,必须有一个‘’实现类‘’来实现该接口
格式:
实现类:public class 实现类名称 implements 接口名称}{
//.....
}
(2)接口的实现类必须覆盖重写(实现)接口中的所有抽象方法
去掉abstract关键字,加上方法体大括号
(3)创建实现类的对象,进行使用
接口: public interface MyInterface { // 这是抽象方法1 public abstract void methodAbs1(); //这也是抽象方法 void methodAbs2(); } 实现类: public class MyImpl implements MyInterface { @Override public void methodAbs1(){ System.out.println("这是第一个方法体"); } @Override public void methodAbs2(){ System.out.println("这是第二个方法体"); } }
public interface MyInterface { public default void defaultMethod1(){ System.out.println("这是新添加的默认方法1"); // System.out.println("AAA"); // System.out.println("BBB"); methodCommon(); } public default void defaultMethod2(){ System.out.println("这是新添加的默认方法2"); // System.out.println("AAA"); //重复代码 // System.out.println("BBB"); //重复代码 methodCommon(); } private void methodCommon(){ System.out.println("AAA"); System.out.println("BBB"); } }
public static final int NUM_OF_MY_CLASS = 6;
多态的使用:
父类: public class Fu { int num = 10; public Fu(){ System.out.println("父类无参构造"); } public Fu(int num){ System.out.println("父类you参构造"); } public void fumethod(){ System.out.println("父类方法执行"); } public void method(){ System.out.println("父类重名方法执行"); int fu = 222; fumethod(); } } 子类: public class Zi extends Fu{ int num = 20; public Zi(){ this(12); System.out.println("子类无参构造"); } public Zi(int num){ System.out.println("子类有参构造"); } public void ziMethod(){ int num = 30; System.out.println("子类方法执行"); System.out.println(num); //输出的是局部变量num = 30 System.out.println(this.num); //输出的是成员变量 num = 20 System.out.println(super.num); //输出的是父类的成员变量 num = 10 // super.method(); } @Override public void method() { super.method(); } } main方法: public class InterfaceMain { public static void main(String[] args) { //多态的使用 Fu obj = new Zi(); obj.method(); obj.fumethod(); Zi zi = (Zi) obj; zi.fumethod(); System.out.println(obj instanceof Zi); } }
public class InterfaceMain { public static void main(String[] args) { Zi zi = new Zi(); give(zi); } public static void give(Fu fu){ System.out.println("来啦"); } }
13.接口多态的综合案例
- - - - 笔记本电脑
笔记本电脑(laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,
但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守
USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。
案例分析:
进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘
(1)USB接口,包含开启功能、关闭功能
(2)笔记本类,包含运行功能、关机功能、使用USB设备功能
(3)鼠标类,要实现USB接口,并具备点击的方法
(4)键盘类,要实现USB接口,具备敲击的方法
public interface USB { public abstract void open(); public abstract void close(); }
public class Mouse implements USB { @Override public void open() { System.out.println("鼠标已连接,可以正常使用"); } @Override public void close() { System.out.println("鼠标已关闭"); } public void kick(){ System.out.println("鼠标点击使用"); } }
public class Keyboard implements USB{ @Override public void open() { System.out.println("键盘已连接,可以正常使用"); } @Override public void close() { System.out.println("键盘已断开"); } public void press(){ System.out.println("键盘输入单词"); } }
public class MyLaptop { private String user; public MyLaptop() {} public MyLaptop(String user) { this.user = user; System.out.println("用户" + user +"正在使用电脑"); } public void powerOff(USB usb1,USB usb2){ System.out.println("笔记本正在关机"); usb1.close(); usb2.close(); } public void powerOn(){ System.out.println("笔记本正在开机"); } public void useDevice(USB usb){ if (usb instanceof Mouse){ System.out.println("这是鼠标设备,使用鼠标设备"); Mouse mouse = (Mouse) usb; //因为不确定传进来的usb设备是鼠标还是键盘,确定后要向下转型 mouse.kick(); } else if(usb instanceof Keyboard){ System.out.println("这是键盘,使用键盘"); Keyboard keyboard = (Keyboard) usb; keyboard.press(); } } }
public class UseLaptop { public static void main(String[] args) { USB mouse = new Mouse(); USB keyboard = new Keyboard(); MyLaptop computer = new MyLaptop("蔡晓武"); computer.powerOn(); computer.useDevice(mouse); computer.useDevice(keyboard); computer.powerOff(mouse,keyboard); } }
标签:变量 多少 技术 判断 remove nts off size def
原文地址:https://www.cnblogs.com/caixiaowu/p/12681477.html