面向对象之继承

面向对象之继承

为了代码的复用性,提出了继承。
1.继承:使用 extends 关键字

public class Student extends Person(){

}

2.如果类A继承自类B,则B称为父类、超类、基类(Superclass);A称为子类、派生类(Subclass)。

3.什么时候才能建立父子关系: A is a B,A就可以继承B

4.有哪些会被继承:
* 一般方法会被继承,受访问修饰符的限制
* 属性会被继承,但是受访问修饰符的限制,比如private修饰的属性,在类的外部就不能直接访问
* 构造方法不会被继承

5.super关键字的使用
* super. 来调用父类的属性或一般方法,但是要注意访问修饰符

public class Student extends Person{
    private int sno;
    public Student(){}
    public Student(String name,int age,int sno){
        super.setName(name);// 对父类一般方法的调用
        super.setAge(age);
        this.sno = sno;
    }
}
  • super() 来调用父类的构造方法
public class Student extends Person{
    private int sno;
    public Student(){}
    public Student(String name,int age,int sno){
        super(name,age);// 对父类构造器的调用
        this.sno = sno;
    }
}
  • 如果一个构造方法的第一行,没有任何的this()和super(),则默认有一个super(),即对父类无参构造的引用。因此如果一个类没有写无参构造器,子类的构造方法可能报错。所以通常对所有的类写出无参构造器,即使当前类不需使用。
public class Student extends Person{
    private int sno;
    public Student(){// 子类构造器
        super();// 表示对父类无参构造的使用
    }
}

6.方法的重写
* 概念:如果子类中有和父类中同名同参同返回的方法,则子类中的方法会覆盖父类中的相应方法。
* 发生在父子类之间
* 同名同参同返回
* 如果一个方法是重写的方法,则可以在方法之前加一个标注:@Override,用于表明这个方法是重写方法。同时,该标注可以给我们检测语法。

public class Student extends Person{
    @Override
    public void learn(){// 重写父类的learn()方法
    System.out.println("学习Java");
    }
}
  • 要注意区分重载与重写的区别:
    重载发生在同一个类中的不同方法之间
    重写发生在父类的方法和子类继承来的方法间

7.Java中的继承是单继承,一个类只能有一个直接父类
* 如果一个类没有继承自任何的其他类,则默认继承自Object

8.Object类方法的重写
* toString()
* 使用System.out.println()输出一个对象时,其实就是输出对象的字符串形式,也即输出对象.toString()的内容
* equals()
* 基本数据类型之间的比较,是用==
* 引用数据类型之间
* 如果使用==,比较的是对象在堆中的地址,地址相同(同一个对象)则为 true ,否则为 false
* 如果使用 equals
1.如果没有重写 equals,则使用默认的 equals,默认的equals 比较的是两个对象的地址,和 == 一样
2.重写 equals ,自己定义比较规则,完成逻辑上的相等比较。(String:重写了Object的 equals方法,规则是比较两个字符串每一位上的字符,如果所有字符都相同,则返回 true)
* 使用alt+shift+s,选中Generate hashCode() and equals()可以快捷生成重写equals方法。

7.字符串常量池

String s3="abc";

语句先判断字符串常量池中有没有”abc”这样的一个字符串常量,如果没有,则将”abc”放入字符串常量池,同时将引用给s3,如果有,则直接将字符串常量池中的”abc”的引用给s3

String s3 = "abc";
String s4 = "abc";
System.out.println(s3==s4);// true  内存地址相同
System.out.println(s3.equals(s4));// true 均为字符串常量池中"abc"的引用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值