面向对象的三大特征
- 封装
- 继承
- 多态
继承:
继承:继承是通过关键字extends体现的。
继承的格式:
class 类名 1 extends 类名2 {}
继承要注意的事项:
- 千万不要为了减少重复代码而去继承,只有真正存在着继承关系的时候才去继承。
- 父类私有的成员不能被继承。
- 父类的构造函数不能被继承。
- 创建子类对象时,默认会先调用父类无参的构造函数。
创建子类的对象,为什么要调用父类的构造方法呢?
调用父类的构造方法是可以初始化从父类继承下去的属性。
class Fu{
int x;
String name;
public Fu(String name){
this.name=name;
System.out.println("Fu类带参的构造函数...");
}
public Fu(){
System.out.println("Fu类的无参构造函数....");
}
}
class Zi extends Fu{
int x=20;
public Zi(String name){
super(name); //指定调用父类一个参数的构造函数
}
public void print(){
System.out.println("x1="+x);
}
}
public class Demo3 {
public static void main(String[] args) {
Zi s1=new Zi("胡巴");
System.out.println("name = "+s1.name);
}
}
在内存中的表现形式为:
继承的练习:
需求:使用java描述一下普通的学生,java基础班的学生,就业办的学生。
普通班的学生:马克思主义
基础班的学生:javase
就业班的学生:javaee+android
class Student1{
String name;
public Student1(String name){
this.name=name;
}
public void study(){
System.out.println(name+"学习马克思主义");
}
}
class BaseStudent extends Student1{
public BaseStudent(String name){
super(name);
}
//重写
public void study(){
System.out.println(name+"学习javase...");
}
}
//就业班的学生也是普通学生中的一种
class WorkStudent extends Student1{
public WorkStudent(String name){
super(name);//子类调用父类的构造方法
}
public void study(){
super.study();
System.out.println(name+"学习javaee和android");
}
}
public class Demo5 {
public static void main(String[] args) {
BaseStudent s=new BaseStudent("胡汉三");
s.study();
//创建一个就业班的学生
WorkStudent w=new WorkStudent("老王");
w.study();
Student1 ss=new Student1("老刘");
ss.study();
}
}