博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础_07
阅读量:6240 次
发布时间:2019-06-22

本文共 3768 字,大约阅读时间需要 12 分钟。

hot3.png

1:继承与构造方法

 213810_ceXy_2354614.jpg

Child c = new Child();

 

要想创建子类,则必须先创建父类。

当创建子类的实例时,会先调用父类的构造方法,将这个类的字节码加载到内存中。

 

package cn.demo;

import org.junit.Test;

 

public class Demo01 {

   

    public void test1(){

        Grandpa g = new Child();   //父类的变量指向子类的实例  回首先调用父类的构造方法

//在此处是childfather-grandpa

 

    }

}

class Grandpa {

    public Grandpa() {

        System.err.println("Grandpa..."+this);//this永远是指new的对象内存地址值,即引用

    }

}

 

class Father extends Grandpa {

    public Father() {

        System.err.println("Father.."+this);

    }

}

 

class Child extends Father {

    public Child() {

        System.err.println("Child.."+this);

    }

}

输出:

Grandpa...cn.demo.Child@514713

Father..cn.demo.Child@514713

 

说明:

   1:实例化子类时,会先调用父类的默认的构造方法。即先会加载父类。

   2:此时在任意的位置(非静态的方法)中使用的this表示的是new的那个对象。

2Super关键字this一样只能用于非静态的方法中

用法1

   调用被隐藏的成员变量。

   调用被重写的成员方法。

class Grandpa {

    public String name = "Grandpa";

    public void say(){

        System.err.println("name is:"+name);

    }

}

 

class Father extends Grandpa {

    public String name = "Father";//如果子类的成员变量与父类的成员量重名,此时父类的成员变量叫被隐藏了    //重写

    @Override

    public void say() {

        System.err.println("father name is:"+name);//Father name is : Father

        //如果希望访问父类的成员变量则可以在非静态的方法里面使用super关键字

        System.err.println("grandpa is :"+super.name);//Grandpa is Grandpa

        //当然也可以调用父类被重写的方法

        super.say();//name is grandpa

    }

}

输出:

father name is:Father

grandpa is :Grandpa

name is:Grandpa

 

用法2

  在子类的构造方法的第一句调用父类的某个构造。

class One {

    public One(String name) {

    }

}

 

/**

 * 当父类没有默认构造时 如果实例化子类,子类又要调用父类的默认的构造 因为父类又没有默认的构造,所以子类出错

 * 此时,子类必须要手工的添加一个任意的构造,且在构造方法的第一句 显式调用父类的某个有参数的构造

 */

class Two extends One {

    public Two() {

//在子类的构造中,必须要调用父类的某个构造

        super("Jack");//

    }

    public Two(String nnm){

        super("Mary");

    }

}

3final关键字

修饰的对象

功能

示例:

可以修饰局部变量

 

 

当修饰局部变量

如果局部变量是数组则整个的数组不能再指向新的地址,但是里面的值是可以修改的

这个变量不能再指向新的地址

 

214029_rvRe_2354614.jpg

 

 

可以修饰成员方法

  当修饰非静态的方法时,说明这个方法子类不能重写。

public class Demo03 {

    @Test

    public void test1(){

        ATwo t = new ATwo();

        t.say();//只能调用父类的

    }

}

 

class AOne{

    //此方法是最后的,不能被子类重写

    public final void say(){

        System.err.println("ddddd");

    }

}

class ATwo extends AOne{

}

 Final可以修饰类

   表示这个类不能有子类

214029_NtVm_2354614.jpg

Fnal可以修饰:

  成员变量

  局部变量

 

  成员方法。

[

         其他的所修饰符号,能不修改局部变量,只有final可以修饰局部变量。

}

4finalprivate

Final修饰的类不能有子类,但是可以被实例化。

 

private修饰的构造,不能拥有子类,也不可以被实例化.

5:抽象类

214107_dait_2354614.jpg

 

抽象关键字是: abstract

 

  abstract修饰类叫抽象类。

   特点:

      1:抽象类不能被new实例化。

                            /**

 * 声明一个抽象类

 */

abstract class Animal{

   

}

以下是错误的;

    new Animal();

 

 

      2:抽象类可以拥有抽象方法

            [抽象方法,是使用了abstract修饰的方法]

            抽象方法不能有方法体:方法后面加上{}即被视为有方法体

               Public abstract void say();

      3:抽象类可以有抽象方法。也可以没有抽象方法。

 

abstract class Animal{

    //此方法是非抽象的

    public void say(){

       

    }

    //抽象

    public abstract void run();

}

    

     4:抽象方法必须要在抽象类里面。   

 

 

     5:当一个类继承抽象类时,必须要实现(重写)所有父类中的抽象方法

 abstract class Animal{

    //此方法是非抽象的

    public void say(){

       

    }

    //抽象

    public abstract void run();

    public abstract void hi();

}

 

class Dog extends Animal{  

    @Override

    public void run() {

    }

 

    @Override

    public void hi() {

    }

}

   5:抽象类可以拥有构造方法。

  

 

说明:

  抽象类,就是用于让子类继承的。

  要求子类必须要实现某些方法,【定义的些规范】

 

 

限制:

   Abstract关键字:不能修饰成员变量。只能修饰成员方法与类。

   Abstract不能与private共同使用。不能与static共同使用。不能与final共同

 

小结:

  抽象类就是被abstact修饰的类。此类不能被实例化。

  abstract修饰的方法,就抽象方法,不能有方法体系,必须要在抽象类里面。

6:接口

接口是被

   Interface声明的类。

interface IOne{

   

}

 

2:也不能被实例化。

   New Ione();错误的。

 

3:接口中的所有方法,默认都是:

     Public abstract

 

interface IOne{

    public abstract void say();

}

 

4:里面的所有成员变量默认都是

   Public static final静态常量 ,必须要声明时或在static代码块中设置值

interface IOne{

    public static final int AGE=34;

    void say();

}

 

5:在接口中不能有任何的实现

{

   …可以被执行的代码

}

 

6:接口位于类层次的最上层

用于让子实现实现

interface IOne{

    public static final int AGE=34;

    void say();

    void hi();

}

//一个类实现一个接口,也可以实现多个接口

class One1 implements IOne{

    public void say() {

    }

    public void hi() {

    }

}

 

7:一个具体类可以实现多个接口

 interface IOne{

    public static final int AGE=34;

    void say();

    void hi();

}

interface ITwo{

    public void run();

}

//class SomeClass extends 亲爹 implements 叔叔1,姑姑,....

//一个类实现一个接口,也可以实现多个接口

class One1 implements IOne,ITwo{

    public void say() {

    }

    public void hi() {

    }

    @Override

    public void run() {

    }

}

   8:接口不能有构造因为不能有任意的实例体所以不能有构造

 

转载于:https://my.oschina.net/u/2354614/blog/543558

你可能感兴趣的文章
winform托盘时,要运行一个实例,解决办法
查看>>
vagrant up 失败解决办法
查看>>
mysql AM/PM to 24 hours fromat
查看>>
远程唤醒UP Board
查看>>
网页打印
查看>>
Loading——spin.js
查看>>
Hadoop完全分布式环境搭建(四)——基于Ubuntu16.04安装和配置Hadoop大数据环境...
查看>>
Mule ESB工程的部署
查看>>
分离被碰撞物体, 求碰撞冲量
查看>>
js移动端 可移动滑块
查看>>
【kruscal】【最小生成树】poj3522 Slim Span
查看>>
jquery ajax提交表单数据的两种方式
查看>>
hdu 2102 A计划-bfs
查看>>
学习集合
查看>>
18校招借鉴
查看>>
JAVA第三次作业
查看>>
2017ICPC北京 J:Pangu and Stones
查看>>
Pandas 数据清洗保存
查看>>
SpringBoot + nodeJS + zookeeper 搭建微服务示例
查看>>
《互联网时代》第二集·浪潮
查看>>