面向对象(小白专属)
Posted 可乐好哇!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象(小白专属)相关的知识,希望对你有一定的参考价值。
面向对象编程
继承
继承
“子类可以继承父类的字段和方法”
class A
public String name;
public String b;
public A(String name)
this.a = a;
public void eat()
System.out.print("吃饭!");
class B extends A
public B(String name)
super(name);
java 中对于字段和和方法共有四种访问权限:
- private:类内部能访问,类外部不能访问
- 默认(包访问权限):类内部能访问,同一个包中的类可以访问,其他类不能访问
- protected:类内部能访问,子类和同一个包中的类可以访问,其他类不能访问(不安全)
- public:类内部和类的调用都能访问
如图所示:
No | 范围 | private | default | protected | public |
---|---|---|---|---|---|
1 | 同一包中的同一类 | ✅ | ✅ | ✅ | ✅ |
2 | 同一包中的不同类 | ✅ | ✅ | ✅ | |
3 | 不同包中的子类 | ✅ | ✅ | ||
4 | 不同包中的非子类 | ✅ |
多态
多态
需要结合向上转型、动态绑定、方法重写,当类的调用者编写方法时,参数类型为父类,方法内部并不知道,也不关注当前父类引用指向哪个类型的子类的实例,此时父类这个引用调用方法可能会有多种不同的表现。
1.使用多态的好处?
- 类调用者对类的使用成本进一步降低
- 能够降低代码的“圈复杂度”,避免使用大量的 if - else
- 可扩展能力更强
抽象
抽象(abstract)
父类中的方法没有什么实际工作,像这种没有实际工作的方法,可以把它设计一个抽象方法,包含抽象方法的类称为抽象类
注意:
- 抽象类不能直接实例化
- 抽象方法不能是private
- 抽象类中可以包含其他的非抽象方法,也可以包含字段,非抽象方法和不同方法的规则都是一样的,可以被重写,也可以被子类直接调用
抽象类的作用
抽象类最大意义就是为了被继承
抽象类不能被实例化,要想使用,只能创建抽象类的子类,让子类重写抽象类的抽象方法
接口
接口(interface)
抽象类的进一步,抽象类中还可以包含非抽象方法和字段,而接口中包含的方法都是抽象方法,字段只能包含静态常量
interface的使用
- 使用interface定义一个接口
- 接口中的方法一定是抽象方法,可以省略abstract
- 接口中的方法一定是public,可以省略public
- 子类使用implement 继承接口,此时不是“扩展”而是”实现“
- 接口不能单独被实例化
子类可以实现多个接口
接口之间可以用extends关键字继承接口,实现复用的效果
区别
1.重载和重写的区别?
- 重载(overload)
- 方法名相同
- 参数列表不同(个数和类型)
- 返回值不作要求
- 重写(override)
- 方法名称相同
- 参数列表相同(个数和类型)
- 返回值也要相同
- final修饰的方法不能被重写
2.this 和 super 的区别?
-
this
- 访问本类中的属性和方法
- 先查找本类,本类没有就调用父类
- 表示当前对象
-
super
- 由子类访问父类中的属性和方法
- 不查找本类,而直接调用
3.抽象类和接口的区别?
-
抽象类(abstract)
- 有构造方法
- 有普通成员变量
- 包含非抽象的方法
- 抽象类中的抽象方法访问类型可以是public、protected、默认类型
- 抽象类中可以包含静态方法
-
接口(interface)
- 没有构造方法
- 没有普通成员变量
- 方法必须是抽象的
- 方法访问类型只能是public abstract
- 接口不能包含静态方法
- 一个类可以实现多个接口,但只能继承一个抽象类
以上是关于面向对象(小白专属)的主要内容,如果未能解决你的问题,请参考以下文章