1.继承
封装:对象代表什么就得封装对应的数据,并提供数据对应的行为 |
继承是面向对象三大特征之一。(封装,继承,多态) |
j继承可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。(子类可以使用父类的公有属性,不能访问父类中的私有成员) |
子类可以有父类的内容,子类还可以有自己特有的内容,子类的内容是子类加上父类,是子类和父类的并集 |
父类的私有属性或者方法子类也不能调用 |
Java中提供一个关键字extends,用这个关键字,我们可以用一个类和另一个类建立起继承关系 public class 子类 extends 父类 |
提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可) |
优点 | 提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性(如果方法的代码需要修改,修改一处即可) | ||||||
什么时候用继承 | 当类与类之间,存在相同的内容,并满足子类是父类的一种,就可以考虑继承 | ||||||
继承的特点 | java中只支持单继承,不支持多继承,但支持多层继承
每一个类都直接或间接继承于Object |
父类 |
| ||||
成员变量的访问特点 | 就近原则,先在局部位置找,如果没有再到成员位置找,最后再到父类的成员位置找,一级一级往上 |
package com.cn.whx.model;
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.ziShow();
}
}
class Fuu {
String name = "Fu";
}
class Zi extends Fuu {
String name = "Zi";
public void ziShow() {
String name = "Zishow";
System.out.println(name);//Zishow //先在局部位置找,如果没有再到成员位置找,最后再到父类的成员位置找
System.out.println(this.name);//Zi //从本类成员位置往上找
System.out.println(super.name);//Fu //从父类成员位置往上找
}
}
2.方法的重写
方法的重写(一定是在子父类的关系上的) | 当父类的方法不能满足子类的需求时需要进行方法的重写 |
在继承体系中,子类出现了和父类一模一样的方法声明,我们就称这个方法是重写的方法 | |
如果子类重写了从父类中继承过来的方法,那么父类中重写的方法就会覆盖 | |
重写方法的名称和形参列表必须与父类中一致 | |
子类重写父类方法时,访问权限必须大于等于父类 | |
子类重写父类方法时,返回值类型必须小于等于父类 |
package com.cn.whx.model;
public class Test1 {
public static void main(String[] args) {
Student s=new Student();
OverseasStudent s1=new OverseasStudent();
s.lunch();
s1.lunch();
}
}
//父类
class Person{
public void eat()
{
System.out.println("吃米饭");
}
public void drink()
{
System.out.println("喝热水");
}
}
//子类学生
class Student extends Person {
public void lunch()
{
//本类成员位置无,往上找,在父类中找到
this.eat();
this.drink();
//去父类中找
super.eat();
super.drink();
}
}
//子类留学生
class OverseasStudent extends Person{
public void lunch()
{
//在本类成员位置中找
this.eat();
this.drink();
//在父类中找
super.eat();
super.drink();
}
//方法的重写
//当父类中的方法无法满足子类现在的需求时,我们就需要把这个方法进行重写
//子类中重写的方法需要加上@Override
@Override
public void eat()
{
System.out.println("吃汉堡");
}
public void drink()
{
System.out.println("喝冷水");
}
}