Java继承

一、什么是继承?

        1.继承表示类与类之间的关系

        2.是由当前类创建出新类的一种机制

           现有的类被称为-----父类

           创建的新类被称为------子类

二、如何完成一个类的继承

        使用关键字extends完成一个类的继承

        格式:public class 子类名称 extends 父类名称{ }

        注意:1.一个类只能继承一个父类

                   2.如果一个类没有使用extends继承,那么该类会默认继承java.lang.Object类,因为Object是对象的意思,所以所有的java类都是java.lang.Object类的子类。[一切皆对象]


三、子类对象创建过程

        1.子类对象再创建的时候,默认会先调用父类的无参数的构造方法

        super() 在子类的构造方法中表示,调用父类无参数的构造方法

        2.当父类中没有无参数的构造方法,在子类的构造方法中的第一句使用super(参数)

        super(参数)在子类的构造方法中表示,调用父类有参数的构造方法

        总结:子类在创建对象的时候,总是先调用父类的构造方法

public class JiChengClass {
    //创建一个无参数的构造方法
    public JiChengClass(){
        System.out.println("我是父类无参数的构造方法");
    }
    //定义一个有参数的构造方法
    public JiChengClass(int age){
        System.out.println("我是父类有参数的构造方法,我的参数是:"+age);
    }
}
public class SonClass extends JiChengClass {
    //继承是子类继承父类中的一些元素
    //通过extends关键字来实现  格式 public class 子类名称 extends 父类名称
    //注意:1.一个子类只能继承一个父类;
    //      2.如果没有使用extends,那么这个类会默认继承java.long.Object类
    //子类创建的过程
    //子类在继承时,会默认继承父类的无参数构造方法
    //在子类中显示调用父类的构造方法,用super(),如果没有参数,则表示调用无参数的构造方法
    //当父类中没有了无参数的构造方法时,在子类的构造方法中的第一句使用super(参数)

    public SonClass(){
        super(25);//这句话必须写在构造函数的第一句话中
        System.out.println("我是子类的构造方法");
    }

}
public class TestMain {
    public static void main(String[] args) {
        //创建SonClass类的对象
        SonClass sonClass=new SonClass();

    }
}

四、什么是Java中的包?Java包的作用是什么?

        Java中的包是指Java的程序包,用来保管Java的源码,Java有其下作用:

        1.整理Java类,方便管理和维护java类或java接口

        2.可以区分名称相同的java类

五、Java包的具体用法

        包的基本格式:公司域名倒置.项目.功能

        跨包使用java元素时:有两种导包方式

                   1.import 包名称.* ------- 导入所有

                   2.import 包名称.类名称 -------- 导入指定包的指定类

        注意:1.包名称中不能包含大写字母

                   2.包名称中不能出现汉字

                   3.java.lang中的元素使用时,不需要导包,系统会默认导包

六、Java中的访问修饰符的区别和用法

        访问修饰符: public      缺省      protected [受保护的]    private [私有的]

        类中只有两种修饰符:public  修饰的java类,在任何地方都可以使用

                                            缺省    修饰的java类,只能在本包中的类使用

        变量和方法可以有四种修饰符: public      缺省      protected [受保护的]    private [私有的]

修饰符同一个类中

同一个包中非子类

   (需要对象访问)

同一个包中子类

不同包中子类

不同包中非子类

 (需要对象访问)

publicyesyesyesyesyes
protectedyesyesyesyesno
缺省的yesyesyesnono
privateyesnononono

    Java中子类的继承性

        子类的继承性指得到是,子类可以从父类继承到那些元素,不能继承到那些元素,与java元素的访问限制修饰符有关

        1.同一个包中的子类可以继承public,缺省的,protecte修饰的变量和方法
        2.不同包中的子类可以继承public,protecte修饰的变量和方法
        3.子类中的元素有些是从父类继承,有些是原本就属于子类自己的。

七、方法重写

        方法重写--子类中某个方法与继承自父类的方法一样,这种现象就是子类重写了父类的方法

public class Person {
	public  void  method(){
		System.out.println("Person类的public方法");
	}
}
public class Student extends Person{
	//子类Student继承并重写了父类Person的method方法
	public  void  method(){
		System.out.println("Student类的public方法");
	}
}
public  class  TestMain{
	public static  void Main(String args[]){
		Student  stu1=new Student();
		stu1.method();
	}
}
//运行结果:
//Student类的public方法

        方法重写与方法重载的区别:

                方法重载--同一个类中方法名称相同,参数不同

                方法重写--子类中的方法与父类中继承来的方法相同

八、成员变量的隐藏

        成员变量隐藏有两种含义:

                1.同一个类中局部变量与成员变量名称相同,此时成员变量会被隐藏,使用局部变量的值,若想强制调用成员变量的值,需要this.变量名

                2.子类中的成员变量如果与从父类继承来的成员变量名称相同,则也会出现成员变量隐藏,此时会使用子类中成员变量的值,若想强制调用从父类中继承的成员变量的值,则需要super.变量名

package com.wangxing.homework.test7;
/*成员变量的隐藏
  有两种含义:
        1.在同一个类中,成员变量和局部变量名称相同,会隐藏成员变量,值为局部变量,想调用成员变量,用this.
        2.子类中的某个成员变量和父类中的某个成员变量名称相同,会隐藏父类中的成员变量,进而使用子类中的变量值
        要想使用父类继承来的成员变量,用super.
 */
public class ChengYuanClass {
    public int id =238;
    public void chengYuanTest(){
        String id = "学号";
        System.out.println("在同一个类中成员变量的隐藏,其结果为局部变量的值==="+id);
        System.out.println("在同一个类中成员变量的隐藏,调用成员变量==="+this.id);
    }
}
package com.wangxing.homework.test7;

public class ChengYuanSonClass extends ChengYuanClass {
    public int id = 3233332;
    public void  test(){
        System.out.println("子类中成员变量的隐藏,其结果为==="+id);
        System.out.println("子类中成员变量隐藏,调用从父类继承来的成员变量,结果为==="+super.id);
    }
}
package com.wangxing.homework.test7;

public class TestMain {
    public static void main(String[] args) {
        //创建ChengYuanSonClass类的对象
        ChengYuanSonClass chengYuanSonClass = new ChengYuanSonClass();
        chengYuanSonClass.test();
        chengYuanSonClass.chengYuanTest();
    }
}
/*
结果为:
    子类中成员变量的隐藏,其结果为===3233332
    子类中成员变量隐藏,调用从父类继承来的成员变量,结果为===238
    在同一个类中成员变量的隐藏,其结果为局部变量的值===学号
    在同一个类中成员变量的隐藏,调用成员变量===238

*/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值