封装
public的变量可以被对象用.的方式引用,但不如↓
将变量定为private,然后加getset方法,保护变量保证封装
继承
Java不支持多继承
构造方法
构造方法不能被继承!!!
但是:
默认存在super()
而子类调用父类有参构造,则需要手写super()
变量
private的成员变量可以被子类继承,但不能被引用。Java官方文档的解释:子类不能继承父类的私有属性,但是如果子类中公有的方法影响到了父类私有属性,那么私有属性是能够被子类使用的。
可认为是不能继承?
所以子类可以通过继承自父类的setter和getter方法访问持有的父类的私有变量。见上面封装写的
方法
private的成员方法不能被子类继承
上转型!
↓上转型对象留下了重写的,但是子类有而父类没有的被去除了!
上转型对象不能访问子类新增的数据域;不能直接访问子类新增的方法(子类中定义的覆盖、隐藏方法不算新增)。只有当对象类型强制转换为子类类型,才能进行相应的调用
上转型对象可以访问子类从父类继承来的数据域、方法或子类中对父类覆盖重写的实例方法,但不能直接访问子类中对父类隐藏重写的静态方法和对父类隐藏定义的数据域。
如果子类覆盖了父类的某个实例方法后,当用上转型对象调用这个实例方法时,一定是调用子类中的这个实例方法。
如果子类隐藏了父类的某个静态方法后,当用上转型对象调用这个静态方法时,一定是调用父类中的这个静态方法,而不是子类中的这个静态方法,输出的值若为静态变量也应该是父类中的静态变量。
总结留下的:父类的,子类重写的(static的留下的是父类的)
另外,上转型对象可以强制转回子类
调用构造方法时也是先父后子,但是如果构造方法里面调用了子类重写的方法,用子类的
static
如果用static修饰变量(静态变量),可以只赋值一次,然后这个类的对象都默认这个值(被所有对象共享)。建议使用时,用类而不是对象来引用
(实际上,static修饰的东西属于类本身,而不是属于对象)
静态方法常用作工具类。只能访问静态变量和静态方法。没有this关键字
非静态都可以访问
final
内部类
另外有静态内部类,局部内部类,匿名内部类