JNC a = new JNC();

对于这个代码我们非常容易理解无非就是实例化了一个剑南春的对象嘛!但是这样呢?

Wine a = new JNC();

在这里我们这样理解,这里定义了一个Wine 类型的a,它指向JNC对象实例。由于JNC是继承与Wine,所以JNC可以自动向上转型为Wine,所以a是可以指向JNC实例对象的。这样做存在一个非常大的好处,在继承中我们知道子类是父类的扩展,它可以提供比父类更加强大的功能,如果我们定义了一个指向子类的父类引用类型,那么它除了能够引用父类的共性外,还可以使用子类强大的功能。

但是向上转型存在一些缺憾,那就是它必定会导致一些方法和属性的丢失,而导致我们不能够获取它们。所以父类类型的引用可以调用父类中定义的所有属性和方法,对于只存在与子类中的方法和属性它就望尘莫及了---1。

java的封装继承和多态

this

在每个类的内部,都有一个隐含的成员变量,该类的类型就是该类的类型,该成员变量的名称是this,this是一个引用,指向自身的对象。

this的用法:

1、this调用本类中的属性,也就是类中的成员变量

2、this调用本类中的其他方法

3、this调用本类中的其他构造方法,调用时要放在构造方法的首行

java的封装继承和多态

面向对象特征之封装(Encapsulation)

为什么要使用封装?

1、比如打电话,我们只要按键拨打就可以,不需要知道手机的内部结构,也不需要知道怎么打出去

2、比如给手机充电,只要通过手机提供的接口,就可以,不需要知道怎么把电冲进去的

封装的含义?

1、隐藏对象内部的复杂性,只对外公开简单的接口,便于外界使用,从而提高系统的扩展性、可维护性

java的封装继承和多态

使用访问权限修饰符,实现封装

Java用于限定其他对象对该类内部定义的访问权限

有public、protected 、private、default(不写)四个

java的封装继承和多态

对于class的权限只能使用public 或 default (不写)

如何实现封装?

修改属性的可见性来限制对属性的访问。为每个属性创建一对赋值方法和取值方法,用于对这些属性的访问。