怕死的免责声明:本人为现为新人笔者,此文章用于记录本人学习路程为主,因此文章内容无教学向。对于文章涉及内容,如有错误敬请指正,若有更好的建议及改进方法本人也愿虚心求教。若有参考本文章内容操作而出现的各种问题,现在下能力不足,也许无法解决,故各位谨慎借鉴。
封装
作用:使用封装会使代码变得更加的安全
体现:
A、属性私有化:private
B、提供public修饰的get/set方法
继承
为什么要继承?
答:实现代码的复用!!!(最大优点)
JAVA中只允许单继承,可以多重继承单一个子类只能有一个父类。
使用extends实现
不可以继承构造器
可以继承所有内容(构造器除外),但不一定可以访问(例如私有化)
父类也叫超类,子类也叫派生类
最上面的父类为Object 默认继承
重写
作用:父类的方法不可以满足子类的要求,这个时候就需要进行方法重写。
方法重写遵循规则:
1.子类方法名与父类名称先全相同
2,子类方法参数列表必须与父类参数列表完全相同
3.子类方法返回值必须和父类方法返回值相同或是父类方法返回值的子类
4,子类方法访问权限修饰符必须和父类方法访问权限修饰符相同或比父类访问权限修饰符范围更大。
静态方法和构造器不谈重写。
关于@override
来判断该方法是否是重写方法。
重载和重写的区别:
英文 | 位置不同 | 作用不同 | |
重载 | overload | 同一个类中 | 在一个类里面为一种行为提供多种实现方式并提高可读性 重写 |
重写 | override | 子类和父类间 | 父类方法无法满足子类的要求,子类通过方法重写满足要求 |
调用本类和父类的问题:
public void m() {
String name = "ll";
System.out.println(name);//局部
System.out.println(this.name);//本类中
System.out.println(super.name);//父类中
aa();//本类
super.aa();//父类
bb();//本类
fu.bb();//父类 尽量不通过super 虽然也可以
}
构造器在继承中的各种调用
super()代表执行父类的无参构造
[1]我们在构造方法中什么都不写的时候系统会默认添加一个super()
[2]当用户显示的书写了this()或者super()系统就不会默认添super()
[3]super()必须位于构造器中有效代码的第一行
[4]super()this()不可以一起使用
代码块的运行顺序:
继承中代码块顺序
父类静态代码块--子类的静态代码块--父类代码块-父类构造---子类代码块--子类构造
子类父类在内存中的体现
而Thinking in Javas第七章初始化基类是这样描述的
由于现在涉及基类和导出类这两个类,而不是只有一个类,所以要试着想象导出类所产生的结果对象,会有点困感。从外部看
来,它就像是一个与基类具有相同接口的新类,或许还会有一些额外的方法和域。但继承并不只是复制基类的接口。当创建了
一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。二者的区别在于,
后者来自于外部,而基类的子对象被包装在导出类对象内部。
修饰符
修饰符 | 同一个类 | 同一个包中(同包可继承) | 子类 | 所有包的所有类 |
private | ★ | |||
默认defalut | ★ | ★ | ||
protected | ★ | ★ | ★ | |
public | ★ | ★ | ★ | ★ |
1.private表示私有,只有自己类能访问
2.default(friendly)表示没有修饰符修饰,只有同一个包的类能访问
3.protected.表示可以被同一个包的类以及其他包中的子类访间 跨包需要继承!
4,public表示可以被该项目的所有包中的所有类访间
修饰符使用位置:
类 | 成员变量 | 方法 | 构造方法
有待分析的问题
问题1:为什么fu1.bb()和zi1.bb()返回值一样