java学习笔记3——重载

本文介绍了Java中的构造器重载,展示了如何在一个类中定义多个构造器,并通过`this`关键字调用其他构造器。同时,文章讨论了重载(overload)与重写(override)的区别,提供了子类重写父类方法的例子,说明了在子类中如何通过`super`关键字访问父类被覆盖的方法。此外,还探讨了Java对象实例变量的存储,包括子类对象如何存储从父类继承的实例变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造器的重载,同一个类中具有多个构造器,多个构造器的形参列表不同,被称为构造器重载。可以在一个构造器里直接调用另一个构造器。
例:
public class Apple{
public String name;
public String color;
public double weight;
public Apple(){
}
public Apple(String name, String color){
this.name = name;
this.color = color;
}
public Apple(String name, String color, double weight ){
//通过this调用另一个重载的构造器的初始化代码
this(name , color);
this.weight = weight;
}
}

       private不能被重写,要重写用protected
       重载( overload):主要发生在同一个类的多个同名方法之间
       重写( override):主要发生在子类和父类的同名方法之间

       一般子类中重写了父类方法后,则程序执行取子类中被重写的方法,而隐藏父类方法,要想在子类中继续使用父类方法,则可以使用super或者父类类名作为调用者来调用父类中被覆盖的方法。
例:
class BaseClass{
public int a = 5;
}
public class SubClass extends BaseClass{
public int a = 7;
public void accessOwner{
System.out.println(a);
}
public void accessBase{
System.out.println( super.a );
}
public static void main(String[] args){
Subclass sc = new SubClass();
//输出7
sc.accessOwner();
//输出5
sc.accessBase();
}
}
      当系统创建SubClass时,实际上会为SubClass对象分配两块内存,一块用于存储在SubClass类中定义的a 成员变量,一块用于存储从BaseClass类中继承得到的a 成员变量。
      当程序创建一个子类对象时,系统不仅会为该类中定义的实例变量分配内存,也会为它从父类继承得到的所有实例变量分配内存,即时子类定义了与父类中同名的实例变量。也就是说,当系统创建一个java对象时,如果该java类中有两个父类(一个直接父类A,一个间接父类B),假设A类中定义了2个实例变量,B类中定义了3个实例变量,当前类中定义了2个实例变量,那么这个java对象将会保存2+3+2个实例变量。

class Parent{
Public String tag="我是你爹";
}
class Son extends Parent{
private String tag="滚,你是我儿子";
}
public class HideTest{
public static void main(String[] args){
Son s = new Son();
//程序不能访问 s 的私有变量tag
//输出“我是你爹”
System.out.println( ( (Parent)d).tag);
}
}
    将s变量强制向上转型为Parent类型,再通过它来访问tag实例变量是允许的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值