您的位置:首页 > 其它

面向对象之继承

2016-07-28 20:28 351 查看

面向对象之继承

为了代码的复用性,提出了继承。

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"的引用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面向对象 继承 class