【学习笔记】Java 面向对象

修饰符

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

访问控制和继承

  • 父类中声明为 public 的方法在子类中也必须为 public。
  • 父类中声明为 protected 的方法在子类中要么声明为 protected,要么声明为 public,不能声明为 private。
  • 父类中声明为 private 的方法,不能够被继承。

源文件声明

  • 一个源文件中只能有一个 public 类
  • 一个源文件可以有多个非 public 类
  • 源文件的名称应该和 public 类的类名保持一致

继承

在这里插入图片描述

  • Java 不支持多继承,但支持多重继承。
  • 子类拥有父类非 private的属性、方法。
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
  • 子类可以用自己的方式实现父类的方法,即重写(override)。
  • final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写。

重写

在编译阶段只是检查参数的引用类型(引用类型为父类则检查父类有无该方法),而在运行时,Java 虚拟机(JVM)指定对象的类型并且运行该对象的方法(运行实际new的对象类型中的方法)。因此可以实现方法重写。

Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); 	 // Dog 对象
a.move();				 // 执行 Animal 类的方法
b.move();				 // 执行 Dog 类的方法
  • 参数列表与被重写方法的参数列表必须完全相同。
  • 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类。
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。
  • 构造方法不能被重写。

抽象类

使用abstract class来定义抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

抽象方法

抽象方法的具体实现由它的子类确定。抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

public abstract double computePay();

如果一个类包含抽象方法,那么该类必须是抽象类。
任何子类必须重写父类的抽象方法,或者声明自身为抽象类。

接口

接口不能用于实例化对象,没有构造方法,所有的方法必须是抽象方法。接口不能包含成员变量,除了 static 和 final 变量。

接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。接口中的方法都是公有的。

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字。接口允许多继承。

与抽象类的异同

相同

  • 可编译成字节码文件
  • 不能创建对象
  • 可以作为引用类型
  • 具备Object类中所定义的方法

不同:

  • 所有属性都是公开静态常量,隐式使用public static final修饰
  • 所有方法都是公开抽象方法,隐式使用public abstract修饰
  • 没有构造函数,动态代码块,静态代码块

类与类只能单继承,extends 父类
类与接口能多实现,implements 接口1,接口2, 接口3
接口与接口能多继承,extends 父接口1, 父接口2, 父接口3

  • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
  • 包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。
  • 在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前

注解

在这里插入图片描述

其他注解

@Data : 注在类上,提供类的get、set、equals、hashCode、toString等方法
@AllArgsConstructor :注在类上,提供类的全参构造
@NoArgsConstructor :注在类上,提供类的无参构造
@Setter :注在属性上,提供 set 方法
@Getter :注在属性上,提供 get 方法
@EqualsAndHashCode :注在类上,提供对应的 equals 和 hashCode 方法
@Log4j/@Slf4j :注在类上,提供对应的 Logger 对象,变量名为 log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值