java笔记-继承

继承:

1)提高了代码的复用性

2)让类与类之间产生了关系,有了这个关系,才有了多态的特性

3)java只支持单继承,不支持多继承


子类中成员的特点:

class Fu{

      int num=4;

}

class Zi extends Fu{

      int num=5;

}

class ExtendsDemo{

      public static void main(String[] args){

            Zi z=new Zi();

            System.out.println(z.num+"......"+z.num);

      }

}

结果为:5......5


class Fu{

      int num=4;

}

class Zi extends Fu{

      int num=5;

      void show(){

            System.out.println(super.num);

      }

}

class ExtendsDemo{

      public static void main(String[] args){

            Zi z=new Zi();

            z.show()

      }

}

结果为:4


变量

如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super


class Fu{

     void show(){

          System.out.println("fu show");

     }

}

class Zi extends Fu{

      void show(){

            System.out.println("zi show");

      }

}

class ExtendsDemo{

      public static void main(String[] args){

            Zi z=new Zi();

            z.show()

      }

}

结果是:zii show


子父类中的函数:

1)当子类出现和父类一模一样的函数时,子类对象调用该函数会运行子函数的内容,这种是函数的重写(覆盖)

2)子类覆盖父类,必须保证子类权限大于等于父类权限

3)静态函数只能覆盖静态

说明:重载只看同名函数的参数列表,重写的子父类方法要一模一样


子父类中的构造函数

在对子类对象初始化时,父类的构造函数也会运行;那是因为子类的构造函数默认第一行有一条隐式的语句super;super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()

class Fu{

     Fu(){

          System.out.println("fu show");

     }

}

class Zi extends Fu{

      Zi(){

            System.out.println("zi show");

      }

      Zi(int x){

            System.out.println("zi…"+x);

      }

}

class ExtendsDemo{

      public static void main(String[] args){

            Zi z=new Zi();

            Zi z=new Zi(4);

      }

}

结果为:

fu  show

zi  show

zi…4


class Fu{

     Fu(int x){

          System.out.println("fu show");

     }

}

class Zi extends Fu{

      Zi(){

            super(4);

            System.out.println("zi show");

      }

      Zi(int x){

            super(3)

            System.out.println("zi…"+x);

      }

}

class ExtendsDemo{

      public static void main(String[] args){

            Zi z=new Zi();

            Zi z=new Zi(4);

      }

}

结果为:

fu  show

zi  show

fu  show

zi…3


为什么子类一定要访问父类中的构造函数

因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的

你可能感兴趣的:(java,继承)