Java继承

1。超类变量可以引用子类对象(比如people = student),但是超类变量只能访问自己的成员,而不能访问子类中有但超类没有的成员。比如有类:

public class People {
 String p_name;
}
public class Student extends People {
 int stu_id;
 }

运行(留意注释的部分)

public static void main(String[] args) {
  People people = new People();
  Student student = new Student();
  
  people = student;
  //student = people;  //超类变量可以引用子类对象,但反之不行
  System.out.println(people.p_name);
  //System.out.println(people.stu_id); //超类变量只能访问自己的成员,而不能访问子类中有但超类没有的成员 
  
 }

2。super:用来调用(最近的)超类的构造函数(永远写在第一行)或访问被一个子类成员的隐藏的超类成员(在子类中定义与超类同名的变量(方法)导致超类的该名的变量(方法)被隐藏)

3。继承中的构造函数调用顺序:按派生顺序,从超类到子类。(子类的构造函数中没有出现super()时,超类的构造函数同样会被调用,只是默认调用无参的构造函数罢了)

4。overloading(重载)是多个函数名相同,参数类型不同;overriding(覆盖)是继承中的子类的方法是超类方法的版本被隐藏。overriding要求超类子类方法的名称、参数相同,否则就是overloading了。另外,返回类型也必须相同,不然是不允许覆盖(overriding)的。

5。动态方法分配(覆盖:多态支持,类似C中的虚函数):当通过一个超类引用调用一个被覆盖的方法时,java基于在调用出现时被引用的对象类型来决定执行哪个版本的方法。换句话说,是被引用的对象类型决定将执行哪个版本的覆盖方法。如:

People有方法setName,Student类中覆盖了这个方法。那么:

Student s = new Student();

People p =s;

p.setName("name");

上面的程序中,p引用调用了一个被覆盖的方法setName,由于Student才是被引用的对象类型,所以这里会调用Student的setName方法。

6。抽象类:能创建对象(类似声明),但不能实例化。与覆盖结合,保证某个超类的所有子类都覆盖了一个必须覆盖的方法。

7。final:1、用来创建(类似的)常量 2、用于方法,用来防止覆盖(与abstract的必须覆盖对应) 3、用于类,防止继承(所以把类同是声明为abstract和final是不合法的)

8。Object:所有类的超类。注意equals方法,用来比较对象的内容,相等就返回true。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值