😁😁学习心得😁😁
今天讲了接口,明白了接口和类的区别,接口存在的意义是,约定。在java中是存在多继承的,发生在接口之间。java类与类之间只有单继承。
😎😎心情😎😎
上午听的比较明白,下午讲的一些关于列表和栈的东西理解的不太全面,关于这个的顺序还要在练习一下
抽象:
* 抽象方法必须在一个抽象类里
* 1.当我们定义了一个抽象类,这个抽象类可以有哪些结构
* 属性 成员方法 构造器 抽象方法 常量
* 2.抽象类中能不能没有抽象方法?
* 抽象类中可以没有抽象方法
* 3.抽象类是不能被实例化的
* 抽象类不能创建对象
* 4.抽象类构造器存在的意义
* 为了约定子类的构造器必须要和父类的匹配
* 5.一个类如果继承了抽象类,就必须重写这个抽象类的全部抽象方法
*
* abstract能修饰什么?
* 类 方法
* 抽象方法能不能用private修饰
* 不能 开发中抽象方法都是public修饰
* 抽象方法能不能用final修饰?
* 不能,用final修饰时不能重写
* 抽象类能不能被final修饰?
* 不能,用final修饰的类是不能被继承的
* 接口
* 比抽象类更高级的抽象。
* 声明:使用interface关键字,public interface Ch02
* JDK1.7之前:接口中只能定义抽象方法,不能有属性,不能有方法。
* (静态的常量)
* JDK8及以后:接口中只能定义抽象方法,不能有属性,可以有默认方法和静态方法
* 静态常量。
* JDK7---JDK8:默认方法,静态方法。
* 接口中结构的特点:
* 接口中的抽象方法默认是public abstract,我们推荐就省略了。
* 接口中的常量默认是public static final,我们推荐就省略了。
* 说一句话:接口中的结构必须是public。
* 接口可以被实现,实现类
* 比如说A类 implements 接口,那我们就说A是这个接口的实现类。
* 如果一个类实现了一个接口,它就需要重写接口中所有的抽象方法。
* 实现接口是可以多实现的,继承只能单继承。
* 开发中,如果一件事情可以通过继承和实现接口来解决问题,接口解决。
* 面试题:
* 1.继承抽象类和实现接口的异同。
* 2.抽象类和接口的区别。
接口存在的意义?
约定。
* 多态的前提条件?
1.继承,实现
2.重写方法
3.父类---子类,接口---实现类
面试题:
在java中只有单继承?
在java中是存在多继承的,发生在接口之间。
java类与类之间只有单继承。
* 面向对象编程
* 面向接口编程
* 面向切面编程
* 抽象类也是比类更高级的抽象。
练习题:
需求: 1.创建一个接口(电子产品),存储数据,导出数据 2.创建一个电脑类,电脑类可以使用电子产品 3.创建一个人,人有一台电脑,可以这台电脑存储数据和导出数据 4.有一个真正的电子产品U盘,存储数据,导出数据 5.有一个真正的电子产品MP3,存储数据,导出数据,听音乐 6.这台电脑是可以使用者两种电子产品的运行效果不同。 需求我写的也不是很清楚,你们可以发散思维,多考虑一些问题。 电子产品
public interface ElectronicProduct { default void importData(){ System.out.println("导入数据..."); } default void exportData(){ System.out.println("导出数据..."); } }
电脑类
public class Computer { public void use(ElectronicProduct electronicProduct) { if(electronicProduct instanceof UDisk) { UDisk uDisk = (UDisk) electronicProduct; uDisk.importData(); uDisk.exportData(); }else if(electronicProduct instanceof MP3) { MP3 mp3 = (MP3) electronicProduct; mp3.importData(); mp3.exportData(); mp3.music(); } } }
人的类
public class Person { private Computer computer; public Computer getComputer() { return computer; } public void setComputer(Computer computer) { this.computer = computer; } public void usePC(ElectronicProduct electronicProduct) { computer.use(electronicProduct); } }
U盘
public class UDisk implements ElectronicProduct { } //Mp3 public class MP3 implements ElectronicProduct { public void music(){ System.out.println("MP3在播放音乐..."); } }
测试
public class Demo { public static void main(String[] args) { Person person = new Person(); Computer computer = new Computer(); // UDisk uDisk = new UDisk(); ElectronicProduct electronicProduct = new UDisk(); electronicProduct = new MP3(); person.setComputer(computer); person.usePC(electronicProduct);
栈和队列
* 栈和队列:
* 栈和队列是两种操作受限的线性表。
*
* 这种受限表现在:
* 栈的插入和删除只允许在表的尾端进行(在栈中叫做“栈顶”),满足FILO
* First In Last Out;
* 队列只允许在表位插入元素,在表头删除元素,FIFO First In First Out
*
* 栈与队列的相同点:
* 1.都是线性结构
* 2.插入操作都是在表尾进行
* 3.都可以通过顺序结构和链式结构实现。
*
* 栈与队列的不同点:
* 1.队列,先进先出,栈先进后出
public class Stack { private SuperLinked superLinked = new SuperLinked(); // 入栈。压栈 public void push(Integer item){ superLinked.add(item); } // 返回栈顶元素,不出栈 public Integer peek(){ if(empty()) { return null; } return superLinked.get(superLinked.size() - 1); } // 出栈,从栈尾出去 public Integer pop(){ if(empty()) { return null; } Integer integer = superLinked.get(superLinked.get(superLinked.size() - 1)); superLinked.remove(superLinked.size() - 1); return integer; } private boolean empty() { return superLinked.size() == 0; } public static void main(String[] args) { // 测试 Stack stack = new Stack(); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.pop(); System.out.println(stack.peek());
匿名实现类
public class Ch01 { public static void main(String[] args) { Ch01 ch01 = new Ch01(); System.out.println("ch01=" + ch01); Abstr01 a01 = new Abstr01() { @Override public void show() { System.out.println("重写过后的show方法..."); } }; a01.show(); Abstr01 abstr02 = new Ch02(); System.out.println(a01); Inter01 inter01 = new Inter01() { @Override public void eat() { System.out.println("重写过后的eat方法..."); } } } } public abstract class Abstr01 { public abstract void show(); } public class Ch02 extends Abstr01 { @Override public void show() { } } public interface Inter01 { void eat();
重点记忆:
栈与队列的不同点: 1.队列 先进先出,
2.栈 先进后出
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构