继承的使用

继承的使用

 

什么是继承关系:

基于某个父类对对象的定义加以拓展,而产生新的子类定义,子类可以继承父类原来的某些定义,也可以增加原来父类所没有的定义,或者覆写父类中的某些特性。 从面向对象的角度上说:继承是一种从一般到特殊的关系,是一种“is a”的关系,即子类是对父类的拓展,是一种特殊的父类,比如:狗是动物的一种特殊情况,狗属于动物。

 -------------------------------------------------------------------------- 

在Java语言中,存在多个类的时候,我们使用”extends”关键字来表示子类和父类之间的关系. 语法格式: 在定义子类的时候来表明自己需要拓展于哪一个父类. public  class  子类类名    extends    父类类名 {          编写自己特有的状态和行为 }

 


在Java中,类和类之间的继承关系只允许单继承,不允许多继承. 也就是说一个类A,只能有一个直接的父类,不能出现类A同时继承于 类B和类C.   但是,Java中允许多重继承. 多重继承例子: 动物有胎生动物和卵生动物之分,胎生动物有老虎,老虎又分华南虎, 东北虎,孟加拉虎等。

 


在Java中除了Object类之外,每一个类都有一个直接的父类. 比如:class Student extends Person{} 我们就说此时Student的直接父类是Person. 问题: class Person{} ,此时Person的父类又是谁? Object类是Java语言的根类(老祖宗,任何类都是Object的子类.) class  Person{} 等价于 class Person extends Object{} Object类要么是一个类直接父类,要么是一个类间接父类.

 -------------------------------------------------------------------------- 

继承关系的作用:                      1):解决了代码的重复问题.                      2):真正的作用,表示出一个体系.

继承的使用继承的使用

子类到底继承了父类的哪些成员(根据访问修饰符来判断):     

 1):如果父类中的成员使用public修饰,子类继承.      

 2):如果父类中的成员使用protected修饰,子类也继承,即使父类和子类不在同一个包中.      

 3):如果父类和子类在同一个包中,此时子类可有继承父类中 缺省修饰符的成员.       

4):如果父类中的成员使用private修饰,子类打死都继承不到.因为private只能在本类中访问.       

5):父类的构造器,子类也不能继承,因为构造器必须和当前的类名相同.

 

 

1)package jicheng;

class person{

    public int age;

    public int height;

}

class student extends person{

    int level;

    student(int a,int h,int l)

    {

        this.age=a;

        this.height=h;

        this.level=l;

    }

}

public class jicheng {

      int number;

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        

       student p=new student(13,175,1);

       System.out.println(p.age+","+p.height+","+p.level);

    }

}

 

2)两者在不同包

package jicheng.a;

public class jichengg {

    protected int age2;

    protected int height2;

    int num;

    public static void main(String[] args) {

        // TODO Auto-generated method stub

    }

}

 

 

package jicheng;

import jicheng.a.jichengg;

class person1{

    protected int age1;

    protected int height1;

}

class student1 extends person1{

    int level1;

    student1(int a,int h,int l)

    {

        this.age1=a;

        this.height1=h;

        this.level1=l;

    }

}

class renlei extends jichengg

{

    int level2;

    renlei(int a,int h,int l)

    {

        this.age2=a;

        this.height2=h;

        this.level2=l;

    }

    

    void show()

    {

        System.out.println(this.age2+","+this.height2+","+this.level2);

    }

    

}

class people extends jicheng{

    people(int n)

    {

        this.number=n;

    }

}

public class protectedd {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

           student1 p=new student1(5, 176, 9);

           System.out.println(p.age1+","+p.height1+","+p.level1);

           renlei p1=new renlei(6, 180, 10);

          // System.out.println(p1.age2+","+p1.height2+","+p1.level2);

           /*因为保护权限的作用域在子类中,固不能直接使用*/

           p1.show();

           people p3=new people(5);

           System.out.println(p3.number);

    }

}

 

3)已在上面实践了。