继承进阶、抽象类、final关键字、代码块

父类没有空参构造(只有有参构造)

子类默认访问是:

子类通过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种设计模式详解icon-default.png?t=M85Bhttp://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中也遵循顺序原则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值