大家好,又见面了,我是你们的朋友全栈君。
1.抽象的概念
2.抽象类和抽象方法的使用
1 //抽象方法和抽象类的格式: 2 /*抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束; 3 抽象类:抽象方法所在的类,必须是抽象类才行,在class之前的写上abstract即可。 4 5 如何使用抽象类和抽象方法 6 1.不能直接创建(new)抽象类对象 7 2.必须用一个子类来继承抽象父类 8 3.子类必须覆盖重写抽象父类当中所有的抽象方法 9 覆盖重写实现:子类去掉抽象方法的abstract关键字,然后补上方法体大括号 10 4.创建子类对象进行使用*/ 11 12 public abstract class Animals { 13 //这是一个抽象方法,代表吃东西,但是具体吃什么(大括号的内容)不确定 14 public abstract void eat(); 15 //这是普通的成员方法 16 public void normalMethod(){ 17 System.out.println("这是普通成员方法"); 18 19 } 20 } 21 22 23 24 public class Cat extends Animals{ 25 @Override//父类抽象方法的重写 26 public void eat(){ 27 System.out.println("猫吃鱼"); 28 } 29 } 30 31 32 public class DemoAbstract { 33 public static void main(String[] args) { 34 Cat cat = new Cat(); 35 cat.eat(); 36 cat.normalMethod(); 37 } 38 }
3.抽象方法和抽象类的注意事项
3.1
1 //抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的 2 3 public abstract class Fu001 { 4 public Fu001(){ 5 System.out.println("父类抽象类构造方法执行"); 6 } 7 public void normalMethod(){ 8 System.out.println("普通成员方法"); 9 } 10 11 public abstract void eat(); 12 } 13 14 15 public class Zi001 extends Fu001 { 16 public Zi001(){ 17 //super(); 18 System.out.println("子类抽象方法执行"); 19 } 20 @Override 21 public void eat(){ 22 System.out.println("孩子吃饭"); 23 } 24 } 25 26 27 public class DemoFuZi { 28 public static void main(String[] args) { 29 Zi001 zi = new Zi001(); 30 zi.eat(); 31 zi.normalMethod(); 32 } 33 }
3.2抽象类中的子类,必须重写抽象父类中所有的抽象方法,否则编辑无法通过会报错。除非该子类也是抽象类。
1 //最高的抽象父类 2 public abstract class Animal { 3 public abstract void eat(); 4 public abstract void sleep(); 5 } 6 7 8 public abstract class Dog extends Animal{ //该子类也是抽象类,不用重写所有父类方法 9 @Override 10 public void eat(){ 11 System.out.println("狗啃骨头"); 12 } 13 14 } 15 16 17 public class DogGolden extends Dog { 18 @Override 19 public void sleep(){ 20 System.out.println("呼呼呼"); 21 } 22 } 23 24 public class Ha2 extends Dog{ 25 @Override 26 public void sleep(){ 27 System.out.println("嘿嘿嘿"); 28 } 29 }
4.继承综合练习
1 package RedListTest;/* 2 *@Author:lcc 3 *@Date:2022/3/13-03-13-16:07 4 *@Description:RedListTest 5 *@version:1.0 6 */ 7 8 public class User { 9 private String name; 10 private int money; 11 12 public User(){ 13 14 } 15 16 public User(String name, int money) { 17 this.name = name; 18 this.money = money; 19 } 20 21 public void show(){ 22 System.out.println("我叫"+name+",总共有"+money+"元"); 23 } 24 25 public String getName() { 26 return name; 27 } 28 29 public void setName(String name) { 30 this.name = name; 31 } 32 33 public int getMoney() { 34 return money; 35 } 36 37 public void setMoney(int money) { 38 this.money = money; 39 } 40 }
1 package RedListTest;/* 2 *@Author:lcc 3 *@Date:2022/3/13-03-13-16:17 4 *@Description:RedListTest 5 *@version:1.0 6 */ 7 8 import java.util.ArrayList; 9 //群主的类 10 public class Manager extends User{ 11 public Manager(){ 12 13 } 14 public Manager(String name, int age) { 15 super(name, age); 16 } 17 public ArrayList<Integer> send(int totalMoney,int count){ 18 //首先要有一个集合,用来存储若干个红包的金额 19 ArrayList<Integer> redList = new ArrayList<>(); 20 //首先看一下自己有多少钱 21 int leftMoney = super.getMoney(); 22 if(totalMoney> leftMoney){ 23 System.out.println("对不起,余额不足"); 24 return redList; //返回空集合 25 } 26 //扣钱就是重新设置余额 27 super.setMoney(leftMoney-totalMoney); 28 29 //发红包需要平均拆分为count份 30 int avg = totalMoney / count; 31 int mod = totalMoney % count; //分完剩下的零头 32 33 //除不开的零头,包在最后一个红包中 34 //下面把红包一个一个放到集合里 35 for (int i = 0; i < count-1; i++) { 36 redList.add(avg); 37 } 38 //最后一个红包 39 int last = avg+mod; 40 redList.add(last); 41 42 return redList; 43 44 } 45 46 }
package RedListTest;/* *@Author:lcc *@Date:2022/3/13-03-13-16:53 *@Description:RedListTest *@version:1.0 */ import java.util.ArrayList; import java.util.Random; public class Member extends User { public Member() { } public Member(String name, int member) { super(name, member); } 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); } }
1 package RedListTest;/* 2 *@Author:lcc 3 *@Date:2022/3/13-03-13-17:01 4 *@Description:RedListTest 5 *@version:1.0 6 */ 7 8 import java.util.ArrayList; 9 10 public class MainRedPacket { 11 public static void main(String[] args) { 12 Manager manager = new Manager("群主",100); 13 Member one = new Member("成员A",0); 14 Member two = new Member("成员B",0); 15 Member three = new Member("成员C",0); 16 17 manager.show(); 18 one.show(); 19 two.show(); 20 three.show(); 21 System.out.println("______________"); 22 //群主总共发20块钱,分成3分。 23 ArrayList<Integer> redList = manager.send(20,3); 24 //三个普通成员收红包 25 one.receive(redList); 26 two.receive(redList); 27 three.receive(redList); 28 29 manager.show(); 30 one.show(); 31 two.show(); 32 three.show(); 33 34 35 } 36 }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155750.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...