父类没有空参构造(只有有参构造)
子类默认访问是:
子类通过super(带参),手动调用父类的带参构造
子类通过this去调用本类的其他构造方法,本类的其他构造方法再通过super(带参),手动调用父类的带参构造(不常用,但可证明)↓
注意:this(...)和super(...)必须放在构造方法第一行有效语句中,并且二者不能共存
java代码以 “ ; ” (分号)作为一行语句码的结束
一个类中的成员变量、构造方法、成员方法顺序可以不固定
子类要想初始化完整,必须接收父类的成员变量(父类的私有成员,也会被子类继承,但无法使用)
子类有参构造:
public class Zi{
private int score;
public m1(String name , int age , int score){
super(name , age );
this.score = score;
}}
父类有参构造:
public class Fu{
private String name;
private int age;
public m1(String name , int age ){
this.name = name;
this.age = age;
}}
Zi s = new Zi( "ss" , 12 , 64);
new了一个 子类 的堆内存:001
001这个空间存在一个专门记录 父类成员的存储空间super
地址值:001
super:父类成员存储空间 private String name; null → "ss" private int age; 0 → 12 | int score; 0 → 64 |
子类的通过自身的构造方法去访问父类的有参构造,父类的有参构造直接访问父类的私有成员变量
继承中构造方法的访问特点:
总结:
1.子类所有构造方法,默认会通过super(),访问父类的无参构造
2.每一个子类构造方法第一条语句默认都是super()
3.this(...)和super(...)必须放在构造方法的第一行有效语句,并且二者不能并存
在写代码时,要遵循开闭原则
开闭原则:对扩展内容开放,对修改内容关闭(想扩展可以复制文件进行修改,但不能对原文件进行修改)
好处:保留原代码,以防方案不确定来回切换
父类:
public String m(){ return null }(语句体内不管写什么,子类都会进行重写,所以写return null )
子类:
可以用@Override进行重写检查
重写m()
抽象类:
只存在于继承中 abstract
抽象方法:
将 “ 共性 ” 的行为(方法)抽取到父类后,发现该方法的实现逻辑无法在父类中给出具体明确,该方法就可以定义为抽象方法
抽象类:
如果一个类中存在抽象方法,那么该类就必须声明为抽象类
注意:
1.子类必须重写父类的所有抽象方法
2.也可以把子类自己变成抽象类------意义不大
3.抽象类不能创建对象,但抽象类是有构造方法的
4.抽象类中可以没有抽象方法,但抽象方法必须有抽象类
抽象方法定义格式:
public abstract 返回值类型 方法名(参数列表);(没有方法体)
抽象类定义格式:
public abstract class 类名{}
抽象类 体现的是 模板设计
模板设计模式(只是设计模式的其中一种)
含义:把抽象类整体看作是一个模板,模板中不能决定的东西定义为抽象方法,让使用模板的类(子类)去重写抽象方法实现需求
好处:已定义了通用结构,使用者只需关心其他需要实现的功能
设计模式:
设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结
使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性、程序的重要性
Java开发中的23种设计模式详解http://t.csdn.cn/ai9nJ
注意:
this目的是解决重名问题,如果没有重名问题问题,可以直接用方法名调用方法
public abstract class Fu{------有抽象方法,类必须定义为抽象类
public void f(){------------模板方法一般都是去定义骨架(结构),是不允许更改的,可用final修饰
sout("我的爷爷");
body();
sout("谢谢观看")}
public abstract void body();---------这是一个抽象方法}
public class Zi extends Fu{
@Override
public void body(){
sout("内容内容内容")}}
public class Test{psvm{
Zi s = new Zi();
s.f();}}
final关键字:
可修饰方法、变量、类
特点:
1.修饰方法:被final修饰的方法,不能被重写
2.修饰变量:表面该变量是常量,不能再被赋值
注意:
a.如果之创建了变量,未赋值,后续可以进行赋值,只需记住只能被赋值一次。
b.被final修饰的成员,在成员变量的位置上,必须先赋值,或在构造方法中赋值(可赋参数值)。
c.final修饰变量是基本数据类型:其值不能被更改
final修饰变量是引用数据类型:地址值不能被更改,但是可以修改对象的属性值
d.常量分为:字面值常量(字符串常量等)、自定义常量(只能赋值一次)
e.常量的命名规范:所有字母大写,有两个单词以上的也是全部大写,且单词之间用下划线 “ _ ” 分隔
代码块:
含义:java中,使用{ }括起来的代码被称为代码块
分类:
局部代码块
构造代码块
静态代码块
局部代码块:
{ 位置:方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率 }
构造代码块:
{ 位置:类中方法外
特点:每次构造方法执行时(无论有参、无参),都会执行该代码块中的代码,并且在构造方法前执行
作用:将多个构造方法中的相同代码,抽取到构造代码块中,提高代码复用性 }
静态代码块:
{ 位置:类中方法外
特点:需要通过static关键字修饰,随着类的加载而加载(类每加载一次,静态代码块就执行一次),并且只执行一次
作用:在类加载时做一些数据初始化操作 }
static中也遵循顺序原则