面向对象的编程

1.使用 import 语句导入包
2.如果需要使用 java.util 中的其他类, 可以使用 import java.util.* 。 但是我们更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况。
3.使用import static 可以导入包中的静态的方法和字段 在这里插入图片描述
4.继承
使用 extends 指定父类.
Java 中一个子类只能继承一个父类 (而C++/Python等语言支持多继承).
子类会继承父类的所有 public 的字段和方法.
对于父类的 private 的字段和方法, 子类中是无法访问的.
子类的实例中, 也包含着父类的实例. 可以使用 super 关键字得到父类实例的引用.
在这里插入图片描述
5.关键字
private: 类内部能访问, 类外部不能访问
default默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问.
protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问.
public : 类内部和类的调用者都能访问
6.如果想从语法上进行限制继承, 就可以使用 final 关键字
final public class Animal {

}
7.向上转型
此时 bird2 是一个父类 (Animal) 的引用, 指向一个子类 (Bird) 的实例. 这种写法称为 向上转型.
(1)直接赋值:
Bird bird = new Bird(“圆圆”);
Animal bird2 = bird;
// 或者写成下面的方式
Animal bird2 = new Bird(“圆圆”);
(2)方法传参
(3)方法返回
public static Animal findMyAnimal() {
Bird bird = new Bird(“圆圆”);
return bird;
}
方法的返回值类型为Animal,bird的类型是Bird
8.动态绑定
在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为 动态绑定.
public static void main(String[] args) {
Animal animal1 = new Animal(“圆圆”);
animal1.eat(“谷子”);
Animal animal2 = new Bird(“扁扁”);
animal2.eat(“谷子”);
}
animal1 和 animal2 虽然都是 Animal 类型的引用, 但是 animal1 指向 Animal 类型的实例, animal2 指向Bird 类型的实例.
针对 animal1 和 animal2 分别调用 eat 方法, 发现 animal1.eat() 实际调用了父类的方法, 而animal2.eat() 实际调用了子类的方法
9.方法重写:子类实现父类的同名方法, 并且参数的类型和个数完全相同, 这种情况称为 覆写/重写/覆盖(Override).
(1)重写和重载完全不一样. 不要混淆(思考一下, 重载的规则是啥?)
重载的方法:在同一个类中,可以存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
(2)普通方法可以重写, static 修饰的静态方法不能重写.
(3)重写中子类的方法的访问权限不能低于父类的方法访问权限.
(4) 重写的方法返回值类型不一定和父类的方法相同(但是建议最好写成相同, 特殊情况除外).
(5)@Override 注解能帮我们进行一些合法性校验
10.抽象类
没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract
method), 包含抽象方法的类我们称为 抽象类(abstract class).
在 方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体(没有 { }, 不能执行具体代码).
对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类.

  1. 抽象类不能直接实例化.
  2. 抽象方法不能是 private 的
    3)抽象类中可以包含其他的非抽象方法, 也可以包含字段. 这个非抽象方法和普通方法的规则都是一样的, 可以被重写,也可以被子类直接调用
    11.接口
    接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量.
    使用 interface 定义一个接口
    接口中的方法一定是抽象方法, 因此可以省略 abstract
    接口中的方法一定是 public, 因此可以省略 public
    Cycle 使用 implements 继承接口. 此时表达的含义不再是 “扩展”, 而是 “实现”
    在调用的时候同样可以创建一个接口的引用, 对应到一个子类的实例.
    接口不能单独被实例化.
    接口中只能包含抽象方法. 对于字段来说, 接口中只能包含静态常量(final static).
    我们创建接口的时候, 接口的命名一般以大写字母 I 开头.
    接口的命名一般使用 “形容词” 词性的单词.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值