zoukankan      html  css  js  c++  java
  • 继承

    继承是从已有的类里派生出新类。继承可以避免很多重复的代码。

    被继承的类叫做父类,派生的类叫做子类,子类和父类的关系是is a的关系,如父类是动物,子类是猫。那么猫继承了动物。猫是动物,但是动物不是猫。

    子类拥有父类非private的属性和方法。

    子类可以拥有自己的属性和方法,可以对父类的方法进行改写。

    继承只能单继承,如子类B只能继承一个父类A。但是可以多重继承。如子类C继承父类B,父类B又可以继承父类C。

    继承使用关键字extends

    如:

    //父类 ConstructorDemo

    public class ConstructorDemo {
    String name = “sandy”;
    int age = 11;
    }

    //子类ConstructorDemoExtend
    public class ConstructorDemoExtend extends  ConstructorDemo{
      
    ConstructorDemoExtend (){}
        }
    }

    子类只能调用而不能继承父类的构造函数。子类需要在自己的构造函数中调用父类的构造函数。
    初始化子类对象可以直接调用父类无参数的构造函数。
    public class Father {
    String name = "Father";
    int age = 50;
    Father(){
    System.out.println("i am father");
    }
    }

    public class SonClass extends Father{

    SonClass(){
    System.out.println("i am sonClass");
    }

    public static void main(String [] args){
    SonClass sClass = new SonClass();
    }
    }
    运行结果:

    i am father
    i am sonClass


    调用父类有参数的构造函数必须通过super,而且必须写在子类构造器中的第一行代码
    public class Father {
    String name ;
    int age;
    Father(){
    System.out.println("i am a constructor without parameter");
    }
    Father(String name){
    this.name = name;
    System.out.println("i am father");
    System.out.println("name: "+name);
    }
    }

    public class SonClass extends Father{


    SonClass(){
    super("Sandy");
    System.out.println("i am sonClass");
    }

    public static void main(String [] args){
    SonClass sClass = new SonClass();
    }
    }

    运行结果:
    System.out.println("name: "+name);

    i am father
    name: Sandy
    i am sonClass

    protected关键字

    子类可以访问父类里protected修饰的属性和方法,但是不能访问private修饰的属性和方法

    public class Father {
    String name ;

    protected void setName(String name){
    this.name = name;
    }

    protected String getName(){
    return name;
    }
    }
    public class SonClass extends Father{

    public static void main(String [] args){
    SonClass sClass = new SonClass();
    sClass.setName("wendy");
    String myName = sClass.getName();
    System.out.println(myName);
    }
    }
    运行结果:
    wendy







  • 相关阅读:
    目标检测算法的总结(R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD、FNP、ALEXnet、RetianNet、VGG Net-16)
    目标检测评价标准(mAP, 精准度(Precision), 召回率(Recall), 准确率(Accuracy),交除并(IoU))
    JavaScript中继承的多种方式和优缺点
    使用Vue封装暂无数据占位图组件
    Vue组件间通信方式到底有几种
    通俗易懂了解Vue中nextTick的内部实现原理
    从0开始编写webpack插件
    常用的webpack优化方法
    通俗易懂了解Vue内置组件keep-alive内部原理
    原生JS实现集合结构
  • 原文地址:https://www.cnblogs.com/xiaohai2003ly/p/7081670.html
Copyright © 2011-2022 走看看