java继承和引用_浅谈Java继承、传递

一、继承

1. 继承的概念:

子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。

2. 继承中的初始化顺序:

从类的结构上而言,其内部可以有如下四种常见形态:属性(包括类属性和实例属性)、方法(包括类方法和实例方法)、构造器和初始化块(包括类的初始化块和实例的初始化块)。对于继承中的初始化顺序,又具体分为类的初始化和对象的初始化。

在new创建对象时,首先对对象属性和初始化块分配内存,并执行默认初始化。如果存在父类,则先为父类对象属和初始化块先分配内存并执行初始化。

然后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块执行初始化。

注:

1. 在对象初始化阶段,属性和方法均针对子类可以从父类继承过来的属性和方法而言,一般而言,都是针对父类中非private而言的。

因为private修饰的为父类所特有的,子类没有继承过来,当new子类时,无须为其分配空间并执行初始化。当然了,父类的构造器子类也是不继承过来的,但构造器另当别论。

2. 类的初始化只执行一次,当对同一个类new多个对象时,类属性和类初始化块只初始化一次。

3.继承中的this和super:

构造器中的this表示当前正在初始化的对象引用,方法中的this表示当前正在调用此方法的对象引用。this具体用法表现在一下几个方面:

1.当具多个重载的构造器时,且一个构造器需要调用另外一个构造其,在其第一行使用this(param)形式调用,且只能在第一行;

2.当对象中一个方法需要调用本对象中其他方法时,使用this作为主调,也可以不写,实际上默认就是this作为主调;

3.当对象属性和方法中的局部变量名称相同时,在该方法中需要显式的使用this作为主调,以表示对象的属性,若不存在此问题,可以不显式的写this。

super表示调用父类中相应的属性和方法。在方法中,若需要调用父类的方法时,也一定要写在第一行。

public class People {

public String name;

private String live="活着";

People(String name){

this.name=name;

System.out.println("人对象"+name+"创建了");

}

public void print(){

System.out.println("name:"+this.name+"\t"+"live:"+this.live);

}

}

public class Student extends People{

public String name;

Student(String n){

super(n);

this.name=n;

System.out.println("学生对象"+name+"已创建");

}

public void print(){

System.out.println("name:"+this.name);

}

}

public class Demo {

public static void main(String [] args) {

Student s=new Student("aaa");

People p=new Student("bbb");

People p2=new Student("ccc");

People p3=p;

s.print();

p.print();

p2.print();

p3.print();

}

}

二、传递

传递分值传递和引用传递。

首先要说明的是java中是没有指针的,java中只存在值传递。 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。

值传递

指的是在方法调用时,传递的参数是按值的拷贝传递。

值传递重要特点:传递的是值的拷贝,也就是说传递后就互不相关了

引用传递

指的是在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的内存空间的地址。

引用传递重要特点:传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间)。

student类加入

public void change(String b){

b=name;

}

主函数:public class Demo {

public static void main(String [] args) {

Student s=new Student("aaa");

s.print();

s.change("ccc");

s.print();

}

}

很显然输出的 是aaa,aaa。传递的是值的一份拷贝,这份拷贝与原来的值没有关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值