继承:
当你为学校的学生登记信息时,他们可能名字,身高体重各不一样,但是还是有许多相同的东西,比如国籍,性别,年龄。那么你每创建一个学生你都要写一些重复的代码吗?
答案是不需要,你只需要创建一个类让需要写重复代码的对象继承(extends)它就能够直接调用这个类的属性与方法,它们就像父亲与孩子的关系,孩子继承了父亲的一些东西。
1,继承解决代码重复问题:
class People {
int i = 1;
String name = "王八";
public void show() {
System.out.println("该干嘛干嘛");
}
}
class Student extends People {
}
class Student2 extends People {
}
class Demo1 {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.i);
s.show();
}
}
上面的代码是继承的简单体现
2,当子类于父类属性重名时:
class People {
int i = 1;
}
class Student extends People {
int i = 2;
public void show() {
int i = 3;
System.out.println(i);
}
}
class Student2 extends People {
}
class Demo1 {
public static void main(String[] args) {
Student s = new Student();
int i = 4;
System.out.println(i);
s.show();
}
}
上面的代码中i的值真真假假傻傻分不清楚,main方法里定义的i与对象是没有关系的,你定义多少打印的就是多少。show方法也一样。但是将show方法中定义的值给注释掉又是什么结果?
其实在创建子类对象时,它为父类提供一个内存空间,当show方法打印i时他先去子类找,如果没有就去父类找,如果也没有就报错。
3,当子类方法与父类方法重名时:
class People {
public void show() {
System.out.println("该干嘛干嘛");
}
}
class Student extends People {
public void show() {
System.out.println("我要学习,别打扰我");
}
}
class Student2 extends People {
}
class Demo1 {
public static void main(String[] args) {
Student s = new Student();
s.show();
People p = new People();
p.show();
}
}
上面一段代码,介绍了子类方法与父类方法重名时怎么运行的。当创建子类时,在方法区中不仅包括子类本身的方法,还有父类的,当要调用一个方法,子类有,调用子类的,子类没有那么就调用父类的。
final
final修式的类不能被继承,final修饰的方法可以被继承但不能被修改。final代表终极形态。