首页 > 代码库 > java的继承性

java的继承性

在java继承中,子类也称为派生类,父类也称为基类或者超类,基本语法 :子类 extends 父类{}

实现一个简单的继承类:

class Person{
    private String name;
    private int age;
    public void setName(String name){
        this.name = name ;
    }
    public String getName(){
        return name;
    }
    public void setAge(int age){
        this.age = age ;
    }
    public int getAge(){
        return age ;
    }
}
class Student extends Person{
    private String school ;
    public void setSchool(String school){
        this.school = school ;
    }
    public String getSchool(){
        return school ;
    }
}
public class Test{
    public static void main(String args[]){
        Student stu = new Student();
        stu.setName("小学生");//父类方法
        stu.setAge(18);//父类方法
        stu.setSchool("蓝翔挖掘机专修学院"); //自身方法
        System.out.println(stu.getName()+"、"  + stu.getAge() + "、" + stu.getSchool());
    }
}

在对子类进行实例化的时候,先是执行父类构造方法,然后执行子类

class Person{
    public Person(){
        System.out.println("父类无参构造");
    }
}
class Student extends Person{
    public Student(){
        super();//此处不写super();也会默认调用
        System.out.println("子类无参构造");
    }
}
public class Test{
    public static void main(String args[]){
        new Student();//此时默认调用父类无参构造
    }
}
/*执行结果:
父类无参构造
子类无参构造
*/
class Person{
    private String name;
    public Person(String name){
        System.out.println("父类无参构造" + name); 
    }
}
class Student extends Person{
    public Student(){
        super("java");//调用父类的有参构造,一定要放在第一个语句,和this()相似
        System.out.println("子类无参构造");
    }
}
public class Test{
    public static void main(String args[]){
        new Student();//此时默认调用父类无参构造
    }
}
/*执行结果:
父类无参构造
子类无参构造
*/

子类覆写父类的方法中的注意点

  实例化的是哪一个类,在实例化对象在调用的时候就会默认调用该类的方法,如果子类不存在该方法,则会调用父类中的该方法,

  子类在覆写父类中的方法时候,方法的访问权限不能比父类要高,如果父类使用了private定义了一个方法,那么子类无法覆写,因为private定义的方法对外不可见只可以在本类中使用,即使子类写了一个相同的方法,也不可以称为覆写

class A{
    public void print(){
        System.out.println("A类中的方法");
    }
    public void fun(){
        System.out.println("B类没有覆写该方法,默认调用父类");
    }
}
class B extends A{
    public void print(){
        System.out.println("B类中的方法");
    }
}
public class Test{
    public static void main(String args[]){
        B b = new B();
        b.print();    //B类中的方法
        b.fun();    //B类没有覆写该方法,默认调用父类
    }
}

 

this.方法():首先会查找子类是否存在该方法,如果存在则直接调用,如果不存在则查找父类中是否有该方法,如果有则直接调用,如果没有则出现编译错误;

super.方法():直接调用父类中的该方法,如果不存在则出现编译时的错误;

重载和覆写之间的区别:

  重载(Overloading):在一个类中进行;方法名相同,参数个数以及类型不同;方法定义的没有权限限制;

  覆写(overrid):发生在继承关系中;方法名称相同,参数个数以及类型相同,返回值相同;子类不能比父类更加严格;

一个不需要注意的继承案例

class Array{
    private int data[];
    private int foot;
    public Array(int len){
        if(len != 0){
            this.data = http://www.mamicode.com/new int[len];
        }else{
            this.data = http://www.mamicode.com/new int[1];
        }
    }
    public void  add(int num){
        if(this.foot>=this.data.length){
            return;
        }else{
            this.data[foot++] =num;    
        }
    }
    public int[] getData(){
        return this.data;
    }
}
//定义一个排序类
class SortArray extends Array{
    public SortArray(int len){
        super(len);//明确调用父类的有参构造,作用是为数组初始化
    }
    //覆写父类方法
    public int[] getData(){
        java.util.Arrays.sort(super.getData());//
        return super.getData();
    }
}
//反转数组
class ReverseArray extends Array{
    public ReverseArray(int len){
        super(len);
    }
    public int[] getData(){
        int num = super.getData().length/2;//反转次数
        int head = 0;
        int tail = super.getData().length - 1;
        for(int x = 0;x < num;x++){
            int temp = super.getData()[head];
            super.getData()[head] = super.getData()[tail];
            super.getData()[tail] = temp;
            head ++;
            tail --;

        }
        return super.getData();
    }
}
public class Test{
    public static void main(String args[]){
        ReverseArray arr = new ReverseArray(3);
        arr.add(1);
        arr.add(10);
        arr.add(3);
        arr.add(4);
        //arr.add(5);
        int data[] = arr.getData();
        for(int x=0;x<data.length;x++){
            System.out.print(data[x]+"\t");
        }
    }
}

 

java的继承性