面向对象07:简单小结类与对象


面向对象08:封装详解


面向对象09:什么是继承


ctrl+h看类的关系,所有的类都默认的或间接继承Object
面向对象10:Super详解


super注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中!
- super和this 不能同时调用构造方法!
 Vs this:
 代表的对象不同:
 this:本身调用者这个对象
 super:代表父类 对象的应用
 前提
 this:没有继承也可以使用
 super:只能在继承条件才可以使用
 构造方法
 this() ;本类的构造
 super():父类的构造!
面向对象11:方法重写
重写:需要有继承关系,子类重写父类的方法!
 1.方法名必须相同
 2.参数列表必须相同.
 3.修饰符:范围可以扩大但不能缩小: public>Protected>Default>private
 4.抛出的异常:范围,可以被缩小,但不能扩大: ClassNotFoundException --> Exception(大)
 重写,子类的方法和父类必要一致: 方法体不同!
 为什么需要重写:
 1.父类的功能,子类不“定需要, 或者不一定满足!
 Alt + Insert ; override;


子类重写父类,执行子类方法。
面向对象12:什么是多态


多态注意事项:
-  多态是方法的多态,属性没有多态 
-  父类和子类,有联系 类型转换异常!ClassCastException! 
-  存在条件:继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son(); 不符合多态:static 方法,属于类,不属于实例;final常量;private方法。 面向对象13:instanceof和类型转换

类型转化:父子之间,子类转换为父类,可能丢失自己本来的一些方法!
父类引用指向子类的对象;向上转型(子类转父类),向下(父类转子类),强制转换;方便方法的调用,减少重复的代码。
面向对象14:static关键字详解
static关键字一句话:方便在没有创建对象的情况下进行调用。
被static关键字修饰的不需要创建对象去调用,直接根据类名就可以去访问。



可以看到类加载时,还未调用main方法就已经调用了静态代码块(static随着类加载一起加载)。
main方法中每次创建对象都会先执行匿名代码块再执行构造器,而静态代码块始终只执行了一次。
静态导入包


面向对象15:抽象类
abstract关键字,可修饰抽象方法、抽象类。
抽象类:类的抽象,可没有抽象方法,但有抽象方法的类一定要声明为抽象类。

抽象类不能被实例化,只有抽象类的非抽象子类可以创建对象。
 抽象类存在的意义:更利于代码的维护和重用,提高开发效率。

编译器给抽象类添加了一个无参构造方法。
面向对象16:接口的定义与实现
接口最能体现oop的精髓,对 对象 的抽象。
在Java编程语言中是一个抽象类型,是抽象对象的集合,对象通常以interface关键字来声明。
-  普通类:只有具体实现 
-  抽象类:具体实现和规范(抽象方法)共存 
-  接口:只有规范,无法自己实现 约束和实现分离->面向接口编程 
接口就是规范,定义一组规则,它的本质是契约,制定好之后大家都要遵守。
声明
| [可见度] interface 接口名称 [extends 其他的接口名] {  | |
| // 声明变量  | |
| // 抽象方法  | |
| } | 
| /** | |
| * 用户接口,需要实现类 | |
| * 锻炼抽象的思维 | |
| */ | |
| public interface UserService { | |
| // 定义的属性默认是静态常量:public static final | |
| int age = 10; | |
| // 定义的方法是公共抽象:public abstract | |
| void add(String str); | |
| void delete(String str); | |
| void update(String str); | |
| void query(String str); | |
| } | 
| public interface TimeService { | |
| void timer(); | |
| } | 
特性
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
- 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
- 接口中的方法都是公有的。
实现
| /** | |
| * 抽象类用继承:extends | |
| * 接口用实现:implements | |
| * 类可以实现接口,需要现实所有方法! | |
| * 利用接口实现伪多继承~ | |
| */ | |
| public class UserServiceImpl implements UserService,TimeService { | |
| @Override | |
| public void add(String str) { | |
| } | |
| @Override | |
| public void delete(String str) { | |
| } | |
| @Override | |
| public void update(String str) { | |
| } | |
| @Override | |
| public void query(String str) { | |
| } | |
| @Override | |
| public void timer() { | |
| } | |
| } | 
类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
在实现接口的时候,也要注意一些规则:
- 一个类只能继承一个类,但是能实现多个接口。
- 一个接口能继承另一个接口,这和类之间的继承比较相似。
继承
接口的继承使用extends关键字,子接口继承父接口的方法。
| // 文件名: Sports.java | |
| public interface Sports | |
| { | |
| public void setHomeTeam(String name); | |
| public void setVisitingTeam(String name); | |
| } | |
| // 文件名: Football.java | |
| public interface Football extends Sports | |
| { | |
| public void homeTeamScored(int points); | |
| public void visitingTeamScored(int points); | |
| public void endOfQuarter(int quarter); | |
| } | |
| // 文件名: Hockey.java | |
| public interface Hockey extends Sports | |
| { | |
| public void homeGoalScored(); | |
| public void visitingGoalScored(); | |
| public void endOfPeriod(int period); | |
| public void overtimePeriod(int ot); | |
| } | |
多继承
-  类不允许多继承 
-  接口允许多继承。 public interface Hockey extends Sports, Event

接口与类相似,一个接口可以有多个方法。
接口与类的区别:
- 接口不能用户实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了static和final变量。
- 接口不是被类集成,而是被类实现。
- 接口支持多继承。

JDK8之后的新特性,支持在接口中实现具体方法,但需要default修饰。default修饰方法只能在接口中使用。
【小沐学Java】VSCode搭建Java开发环境_vscode java-CSDN博客  https://blog.csdn.net/hhy321/article/details/138250174?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-10-138250174-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-10-138250174-null-null.nonecase












![【c++进阶[五]】list相关接口介绍及list和vector的对比](https://i-blog.csdnimg.cn/direct/d4cc160f5ae84eae8c62c1f9363e3fd2.png)





