JAVA笔记:类的结构与继承

JavaBean规范下的标准类

public class ClassName{
//成员变量
//构造方法
//无参构造方法【必须】
//有参构造方法【建议】
//成员方法
//getXxx()
//setXxx()
}

访问控制修饰符(public protected default private)

JAVA访问控制符的含义和使用情况

public: 类内部 本包 子类 外部包
protected :类内部 本包 子类
default : 类内部 本包
private: 类内部

注意事项

(1):类中定义变量,若无修饰符,则默认修饰符为default。
(2):类中变量由private修饰时,外部访问和修改变量只能通过成员方法getXxx()和setXxx()实现
(3):有参构造属于无参构造的重载形式,当一个类中没有在代码中编写构造方法时,编译器默认在类中自动生成无参构造方法。 即任何一个类都至少有一个构造方法,且一定有一个无参构造。

对象

创建对象的标准格式

类名 对象名 = new 类名();

创建匿名对象的格式

new 类名();

对象被创建的过程

  当代码执行到//new 类名;操作时,首先虚拟机在堆内存中分配内存给新建对象。首先创建的是成员变量,当成员变量定义后有赋值操作,则将值赋给该成员变量并保存在堆中,如若只有定义,没有赋值,则成员变量将被赋予默认值(可作为重大差别,区分类与接口)。
  在堆中还将保存该对象所使用的方法在方法区中的地址(仅在该对象所在类的地址范围内寻找)。接下来将执行该类的构造方法,若创建对象的代码中类名括号内无参数,则调用无参构造,若有参数,则按照输入的参数类型和个数,寻找相应的有参构造并执行。
  如果该类中没有静态代码块,则创建过程到此结束。若代码为创建对象的标准格式,则最后将该对象在堆中的地址赋给对象变量名。

注意事项

(1):匿名对象只能使用一次
(2):创建对象时,若成员变量赋予默认值,则有以下情况:
  整数(byte,short,int,long): 0
  浮点数(float,double): 0.0
  字符(char): “/u0000”
  布尔(boolean): false
以上为基本类型情况,若对象属于引用类型,如数组,类,接口:null

继承

继承格式

    class 父类 {
        ...
    }
    class 子类 extends 父类 {
        ...
    }

“继承者们”(子类)的特点

  在继承之后,“儿子就是父亲,且不仅仅是父亲”。子类拥有父类的所有成员变量和成员方法(构造函数将另说)。
  但是不可避免将出现各种重名情况,为了解决子类父类在重名问题上的冲突,需要引出this,super关键字以及覆盖重写(Override)

继承关系中的成员变量名重名问题——使用this和super

  首先,假设父类编写完成,在子类中编写代码时使用的变量名与父类重名:
  由于在类中的成员方法里,局部变量(形参)以外的变量默认由this修饰,即子类和父类成员变量名重名冲突时,实际上优先使用的是子类的成员变量,若想访问父类成员变量,可在变量前用super修饰(若无重名问题则可省略super,可直接访问)。

继承关系中的成员方法名重名问题——Override

  在定义一个类时,如果除了无参构造方法,想再增加一个有参构造,则方法名不变,改变方法的参数,可实现方法的重载。
  在继承问题中,子类拥有父类的方法,也可以进行重载,但是如果除了方法名相同外,参数和返回值的类型都分别和父类的方法相同(即两个方法完完全全一样),那么编译也将通过,这个过程叫做覆盖重写,即Override。
  Override之后,新的方法体将把父类的方法体全部覆盖,但是一般不会这么做,这么做的意义不大,子类继承父类的目的就是在父类基础上添加功能,重写父类的方法也是同样目的,可在子类重写的方法体中,用super修饰符调用父类该方法的方法体,之后再写新的方法体,就达到了在父类的基础上添加新功能的目的。

继承关系中的构造方法

  继承关系中,构造方法是其内在矛盾之一,原因是:
(1)构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。
(2)构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。
为了解决这个矛盾,JAVA引入了super()用来调用父类的构造方法。

   注意:
(1)子类构造方法中,用super()可调用父类的无参构造和有参构造。
(2)相应的,this()可调用本类的有参或无参构造函数。
(3)super()和this()都只能作为本类的构造方法中代码的第一句。
(4)在继承关系中,子类若没有代码写明构造方法,则自动创建一个无参构造函数,并且在无参构造函数中自动编译执行super()调用父类的无参构造。即子类构造必然调用父类构造(第五点的情况下除外),因为创建子类对象时,必须先对父类初始化,才能继续对子类进行初始化。
(5)由于调用构造的super()和this()都只能在构造方法的方法体的第一句。所以一个构造方法内有且仅有一次对其他的构造方法的调用。所以当本类某一构造方法调用了本类的其他构造方法时,则无法再调用第二个构造方法,更无法调用父类的构造方法。
(6)若本类中的所有构造函数中的调用形成了死循环,则编译器会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值