Java基础总结|Java期末复习速成(五)

Java期末复习速成(五)
文章目录

  • Java期末复习速成(五)
  • 访问控制权限
    • 继承
    • 多态
    • 组合
    • 代理
    • 向上转型
    • static
    • final


访问控制权限
访问控制权限又称为封装,它是面向对象三大特性中的一种,我之前在学习过程中经常会忽略封装,心想这不就是一个访问修饰符么,怎么就是三大特性的必要条件了?后来我才知道,如果你信任的下属对你隐瞒bug,你是根本不知道的。
【Java基础总结|Java期末复习速成(五)】访问控制权限其实最核心就是一点:只对需要的类可见。
Java中成员的访问权限共有四种,分别是 public、protected、default、private,它们的可见性如下
Java基础总结|Java期末复习速成(五)
文章图片



继承 继承是所有 OOP(Object Oriented Programming) 语言和Java语言都不可或缺的一部分。只要我们创建了一个类,就隐式的继承自 Object 父类,只不过没有指定。如果你显示指定了父类,那么你继承于父类,而你的父类继承于Object 类。
Java基础总结|Java期末复习速成(五)
文章图片

继承的关键字是extends ,,如上图所示,如果使用了extends 显示指定了继承,那么我们可以说Father是父类,而Son是子类,用代码表示如下
class Father{} class Son extends Father{}

继承双方拥有某种共性的特征
class Father{ public void feature(){ System. out. println("父亲的特征"); } } }class Son extends Father {}

如果Son没有实现自己的方法的话,那么默认就是用的是父类的 feature方法。如果子类实现了自己的feature方法,那么就相当于是重写了父类的 feature方法,这也是我们上面提到的重写了。

多态 多态指的是同一个行为具有多个不同表现形式。是指一个类实例(对象)的相同方法在不同情形下具有不同表现形式。封装和继承是多态的基础,也就是说,多态只是一种表现形式而已。
如何实现多态?多态的实现具有三种充要条件
  • 继承
  • 重写父类方法
  • 父类引用指向子类对象
比如下面这段代码
public class Fruit { int num; public void eat(){ System. out.println( "eat Fruit"); } } public class Apple extends Fruit{ @Override public void eat() { super.num = 10; System. out.println( "eat " + num + " Apple"); } public static void main(String[] args) { Fruit fruit = new Apple(); fruit.eat(); } }

你可以发现 main方法中有一个很神奇的地方,Fruit fruit = new Apple() ,Fruit类型的对象竟然指向了Apple对象的引用,这其实就是多态->父类引用指向子类对象,因为 Apple继承于
Fruit,并且重写了eat方法,所以能够表现出来多种状态的形式。

组合 组合其实不难理解,就是将对象引用置于新类中即可。组合也是一种提高类的复用性的一种方式。如果你想让类具有更多的扩展功能,你需要记住一句话多用组合,少用继承。
public class SoccerPlayer { private String name; private Soccer soccer; }public class Soccer { private String soccerName; }

代码中SoccerPlayer 引用了Soccer类,通过引用Soccer类,来达到调用soccer中的属性和方法。组合和继承是有区别的,它们的主要区别如下。
Java基础总结|Java期末复习速成(五)
文章图片

关于继承和组合孰优孰劣的争论没有结果,只要发挥各自的长处和优点即可,一般情况下,组合和继承也是一对可以连用的好兄弟。

代理 除了继承和组合外,另外一种值得探讨的关系模型称为代理。代理的大致描述是,A想要调用B类的方法,A不直接调用,A会在自己的类中创建一个B对象的代理,再由代理调用B的方法。例如如下代码
public class Destination { public void todo(){ System.out.println( "control. . ."); } }public class Device { private String name; private Destination destination; private DeviceController deviceController; public void control(Destination destination){ destination.todo(); } }public class DeviceController { private Device name; private Destination destination; public void control(Destination destination){ destination.todo(); } }


向上转型 向上转型代表了父类与子类之间的关系,其实父类和子类之间不仅仅有向上转型,还有向下转型,它们的转型后的范围不一样
  • 向上转型︰通过子类对象(小范围)转化为父类对象(大范围),这种转换是自动完成的,不用强制。
  • 向下转型 :通过父类对象(大范围)实例化子类对象(小范围),这种转换不是自动完成的,需要强制指定。

static static 是Java 中的关键字,它的意思是静态的 ,static 可以用来修饰成员变量和方法,static 用在没有创建对象的情况下调用方法/变量。
  • 用static声明的成员变量为静态成员变量,也成为类变量。类变量的生命周期和类相同,在整个应
    用程序执行期间都有效。
static String name = "cxuan " ;

  • 使用static修饰的方法称为静态方法,静态方法能够直接使用类名.方法名进行调用。由于静态方法不依赖于任何对象就可以直接访问,因此对于静态方法来说,是没有this关键字的,实例变量都会有this 关键字。在静态方法中不能访问类的非静态成员变量和非静态方法,
static void printMessage(){ System.out. println( " cxuan is writing the article"); }

static除了修饰属性和方法外,还有静态代码块的功能,可用于类的初始化操作。进而提升程序的性能。
public class staicBlock { static{ System. out.println( "I 'm A static code block "); } }

由于静态代码块随着类的加载而执行,因此,很多时候会将只需要进行一次的初始化操作放在 static代码块中进行。

final final 的意思是最后的、最终的,它可以修饰类、属性和方法。
  • final修饰类时,表明这个类不能被继承。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
  • final修饰方法时,表明这个方法不能被任何子类重写,因此,如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final。
  • final修饰变量分为两种情况,一种是修饰基本数据类型,表示数据类型的值不能被修改; 一种是修饰引用类型,表示对其初始化之后便不能再让其指向另一个对象。

    推荐阅读