java类的继承

类的继承是Java面向对象的一个重点,想要Java入门就必须掌握继承这个知识点,下面由我来分享一下类的继承这个内容,本文章仅代表个人想法,仅供参考。

类的继承的含义

类的继承举个例子就像儿子可以继承父亲的财产,基因等,儿子就像类里面的子类,父亲就相当于类里面的父类,财产、基因就是代表类里面的属性和方法。简单的来说就是子类可以继承父类的属性和方法。
对于没有写要继承的类的话,默认父类为java.lang包下面的Object。

类的继承的用法

语法:

[访问修饰符] class 子类名字 extends 父类名字{
}

1)宠物类pet是父类,猫Cat类是子类,子类可以调用父类的属性和方法。

//父类
public class Pet{
    String name;
    private int heath;
    public void eat(){
    System.out.print("我在吃东西")}
}
//子类
public class Cat extends Pet{
}

public class Test{
  public static void main(String[] args){
  	Cat cat = new Cat();
  	cat.name = "喵喵";
  	System.out.println(cat.name); //这里会打印出喵喵,就说明子类调用了父类的name属性;
  	cat.heath = 100; //这里程序编译会报错,因为heath属性在父类用private修饰了,因此这个只能在父类中使用,子类使用不了
  	cat.eat();//这里会打印出文字我在吃东西,说明子类调用了父类的eat()方法
  }
}

2)java的继承不支持多继承,只能单继承

//如下例子在编译的时候会报错,Java继承只能单继承
public class Cat extends Animal,Pet{
}

3)java继承支持多层继承

public class Animal{
}
public class Pet extends Animal{
}
public class Cat extends Pet{
}

Java子类的实例化过程

1)初始化父类的属性
2)执行父类的构造
3)初始化子类的属性
4)执行子类的构造方法
下边代码序号是代表子类实例化的过程;

public class Pet{
    String name;                         (1)父类进行初始化 name = null;health = 0private int heath;
    public Pet(){2)运行父类的构造方法
       System.out.println("父类的构造方法");
    }
}
//子类
public class Cat extends Pet{
    String kind;3)子类进行初始化 kind = nullpublic Cat(){4)运行子类的构造方法
      System.out.println("子类的构造方法");
    }                      
     
}

public class Test{
  public static void main(String[] args){
  	Cat cat = new Cat();
  }
}

上面的例子运行结果是:
父类的构造方法
子类的构造方法

super关键字

(1)super.

super是表示当前类的父类对象,可以通过super.父类属性名或者super.父类的方法名()来访问父类的属性和方法。
不是说子类已经继承了父类的属性和方法了,用super关键字会不会显得多余?
其实并不多余的,当子类重写父类的方法的时候,jvm虚拟机会就近原则,先执行本类的方法,如果加super关键字jvm虚拟机就会去调用父类的方法。

//父类
public class Pet{
    String name;
    private int heath;
    public void eat(){
      System.out.print("动物在吃东西")}
}
//子类
public class Cat extends Pet{
    public void eat(){
       System.out.print("小猫在吃东西")}
    public void doto(){
       eat();
    }
}

public class Test{
  public static void main(String[] args){
       Cat cat = New Cat();
       cat.todo();
  }
}

上面代码输出的是:小猫在吃东西,由此可见它调用的是子类的eat() 方法

那我们改一下Cat类加个super关键字效果会如何

public class Cat extends Pet{
    public void eat(){
       System.out.print("小猫在吃东西")}
    public void doto(){
       super.eat();
    }
}

输出的结果是:动物在吃东西 所以加关键字super调用的是父类的eat方法

(2)super()

子类继承父类是继承不到父类的构造方法的,当我们想要调用父类的构造方法的时候可以使用super();来调用构造方法。super();方法调用的是父类的无参数构造方法,它也可以不写,jvm虚拟会在你没有super();的时候会自动帮你添加,写上了jvm虚拟机也不会自动帮你添加。

需要注意的是:
super();只能运用在子类的构造方法,并且要放在子类构造函数的第一行

public class Cat extends Pet{
  public Pet(){
    super();       //super();可以省略
  }
}
public class Cat extends Pet{
  public Pet(){
    System.out.print("构造函数!")
    super();                       //在编译的时候报错,因为super();要放在第一行
  }
  public void eat(){
    super();                   //在编译的时候报错,因为super只能放在子类的构造函数里
  }
}

super(),里面也可以加参数,加参数就是调用父类的有参构造方法

//父类
public class Pet{
  private String name;
  public Pet(String name){
  this.name = name;
  }
}
//子类
public class Cat extends Pet{
  public Cat(String name){
    super(name);
  }
}

如上面的例子Cat类的构造方法调用了父类的有参构造方法。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值