java基础之----继承

来源:互联网 发布:卖家怎么开通爱淘宝客 编辑:程序博客网 时间:2024/05/21 14:57

概念:
java通过extends实现继承,被继承的类称为父类,继承后的类称为子类。
每个类最多只有一个直接父类,不能实现多继承。
Object类是所有类的父类

成员变量:
当本类的成员和局部变量同名时用this区分
当子父类的成员变量同名用super区分父类。
this代表一个本类对象的引用
super 代表一个父类空间

 class Fu {    private int num = 4;    public int getNum()    {        return num;    }} class Zi extends Fu{    private int num = 5;    void show()    {        System.out.println(this.num+"...."+super.getNum());    }} class ExtendsD2 {     public static void main(String args[])     {         Zi z = new Zi();         z.show();     } }    }}

成员函数:
当子父类中出现成员函数一模一样的情况,会运行子类的函数。这种现象,称为覆盖操作,这时函数在子类中的特性。
函数两个特性:
重载:同一个类中overload
覆盖:子类中,覆盖也称为重写,覆写。override

覆盖注意事项:
子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限。
静态只能覆盖静态,或被静态覆盖。

package com.aoboco.seven; class Fu1  {     public static void show()     {         System.out.println("fu show run");     }} class Zi1 extends Fu1{    public static void show()    {        System.out.println("zi show run");    }} class ExtendsD3 {     public static void main(String args[])     {         Zi1 z = new Zi1();         z.show();     } }

构造方法:
子类调用父类构造器的方法,和this本类中调用构造器的方法基本类似。通过super实现。

不管是否用super来执行父类构造方法的初始化代码,子类构造器总会调用父类构造方法一次。具体如下:
子类构造方法使用super显式的调用,系统将根据super传入的参数,调用父类对应的构造方法。
子类构造器的第一行代码使用this显式的调用重类中的重载的构造器,系统将根据this里调用传入的参数列表调用本类中对应的构造器,在执行本类中另一个构造器就会调用父类构造器。
即没有this和super关键字时,子类会调用子类构造器前,隐式调用父类没有参数的构造器。

不管上面那种方法,子类在执行本类构造器前,都会先调用父类的构造器,调用父类构造器的时候,父类会再调用父类的构造器,一直追溯到Object类的构造器。

一个对象实例化过程:
Person p = ne Person
1,JVM 会读取指定的 路径下Person.class文件, 并加载进内存文件,
并会先加载 Person的父类(如果有直接的父类情况下 ).
2,在堆内存中的开辟空间,分配地址。
3,并在对象空间中,的属性进行默认初始化。
4,调用对应的构造函数进行初始化。
5,在构造函数中,第一行会先到调用父类进初始化。
6,父类初始化完毕后,在对子的属性进行显示。
7,在进行子类构造函数的特定初始化。
8,初始化完毕后,将地址值赋给引用变量

子父类中构造函数的特点:
在子类构造对象时,发现父类构造函数也运行了。
为什么呢?
原因是:在子类的构造函数中第一行有个默认隐式语句。 super();
子类的实例化过程中所有构造函数默认都会访问父类空参数的构造函数。
为什么子类实例化的时候要访问父中构造函数呢?
那是因为子类继承了父类,获取到父类中的内容 所以在使用父类内容之前要先看看父类是如何对自己的内容进行初始化的。
所以子类在构造对象时,必须先访问父类中的构造函数。
怎样才能完成这个必须的动作呢,就在子类构造函数中加入了super() 语句。
如果父类中没有定义空参数构造函数,super需要明确要调用父类中哪一个构造函数。同时子类如果使用 this 调用了本类构造函数时,那么 super就没有了,因为 super 和this都只能定义第一行。 所以两个只能定义一个在第一行。
但是可以保证的,子类中肯定会有其他构造函数访问父类。
注意: supre 语句必须要定义在子类构造函数的第一行。 因为父初始化动作先完成语句必须要定义在子类构造函数的第一行。

final 关键字:
1,final是一个修饰符,可以修饰类、方法、变量。
2,final修饰的类不可以被继承。
3,final修饰的方法不可以被覆盖。
4,final修饰的变量是一个常量,只能赋值一次。
为什么要用final修饰变量。其实在程序中如果一个数据是固定的
那么就可以直接使用这个数据,但是样阅读性很差,所以就给它该起了一个名称。而且这个变量名称的值不能就能化,所以加上 final固定。
写法规范:常量所有字母都大,多个单词中间用 写法规范:多个单词中间用 _连接。

0 0
原创粉丝点击