20220726 第一组 于芮 面向对象之抽象类与接口 (第十七天)
抽象abstract(没有大括号,没有方法体,有返回值,加了关键字)
约定:自定义规则
抽象方法必须在一个抽象类里,抽象类里也可以没有抽象方法
抽象类不能创建对象
为了约定子类的构造器和父类相匹配
abstract可以修饰类,方法
抽象方法不能用private修饰,不能用final修饰,final修饰的方法不允许被重写
抽象类不能用final修饰,final修饰的类不允许被继承
抽象方法必须是public或者是protected(private不能被子类继承,子类便无法实现该方法,默认情况就是public)
抽象类不能被直接实例化,需要依靠子类采用向上转型的方式处理
抽象类必须有一个子类,一个类只能继承一个抽象类
子类(如果不是抽象类),则必须重写抽象类中的所有抽象方法
(如果子类没有实现父类的抽象方法,必须将子类也定义成abstract)
约定大于配置,配置大于编码
抽象类中的结构
1.属性
2.成员方法
3.构造器
4.抽象方法
5.常量
接口(比抽象类更高级的抽象)
声明:使用interface关键字
接口中结构的特点(结构必须是public)
1.接口中的抽象方法默认是public abstract,推荐省略
2.接口中的常量默认是public static final,推荐省略
接口可以被实现,实现类
如果一个类实现了一个接口,需要重写接口中所有的方法
一个类可以实现多接口,继承只能继承一个
接口存在的意义:约定
java中存在多继承,在接口之间,在类之间只有单继承
栈和队列(两种操作受限的线性表)
相同点
1.都是线性结构
2.插入操作,都是在表尾进行
经过这段时间的学习,我深感到作为一名程序猿远没有想象的那么简单,我们就像一个接口,哪里需要去哪里,我们只是代码的搬运工,通过自己的逻辑让一堆毫无感情的英文字母变得活灵活现,可以实现诸多功能,今天还接触了一些数据结构中的知识,来看看今天的实例练习吧!
1 package com.jsoft.afternoon.test03; 2 3 import com.jsoft.afternoon.Queue; 4 import com.jsoft.morning.B; 5 6 import java.util.Scanner; 7 8 /** 9 * 银行取票机 10 * 队列 11 * 12 */ 13 public class BankTicketMachine { 14 15 // 需要一个队列结构 16 private Queue queue = new Queue(); 17 18 // 银行的小票起始号 19 private int startNumber = 100; 20 21 private Scanner scanner = new Scanner(System.in); 22 23 // 取票 24 public Integer getTicket(){ 25 if(queue.empty()){ 26 System.out.println("号码已经全部领取,需要继续释放号码!"); 27 System.out.println("请输入释放号码的个数:"); 28 Integer number = scanner.nextInt(); 29 pushTicket(number); 30 } 31 return queue.poll(); 32 } 33 34 // 排队 35 public void pushTicket(int ticketNumber){ 36 for (int i = 0;i < ticketNumber;i++){ 37 startNumber += 1; 38 queue.add(startNumber); 39 } 40 } 41 public void run() { 42 while(true) { 43 System.out.println("请输入您的名字:"); 44 String name = scanner.next(); 45 Integer ticket = getTicket(); 46 System.out.println("尊敬的【"+ name+ "】,您的号码是:" + ticket + "。"); 47 } 48 } 49 50 public static void main(String[] args) { 51 // BankTicketMachine bankTicketMachine = new BankTicketMachine(); 52 new BankTicketMachine().run(); 53 } 54 }