面向对象
继承
什么是继承
在继承的关系中,“子类就是一个父类”。子类可以被当做父类看待
例如:父类是员工,子类是讲师,那么“讲师就是一个员工”。
定义格式
定义父类的格式:
public class 父类名称{
//...
}
定义子类的格式:
public class 子类名称 extends 父类名称{
//...
}
主程序:demo
public class demo {
public static void main(String[] args) {
//创建了一个子类对象
Teacher teacher = new Teacher();
//用子类对象引用method方法
teacher.method();
//子类是空的,但是继承了父类,所以就把子类当做父类看待
}
}
父类(员工):Employee
public class Employee {
//父类方法
public void method(){
System.out.println("方法执行!");
}
}
子类(老师):Teacher
public class Teacher extends Employee{
//子类中是空的,但继承了父类
}
应用
代码复用效果
在原来的demo、Employee、Teacher基础上再建立一个子类(助教)Assistant
public class Assistant extends Employee{
//助教,子类,继承父类Employee
}
在主程序demo修改如下
public class demo {
public static void main(String[] args) {
//创建了一个老师子类对象
Teacher teacher = new Teacher();
//用子类对象引用method方法
teacher.method();
//子类是空的,但是继承了父类,所以就把子类当做父类看待
//创建了一个助教子类对象
Assistant assistant = new Assistant();
//用子类对象引用method方法
assistant.method();
//子类是空的,但是继承了父类,所以就把子类当做父类看待
}
}
覆盖重写
在父子类的继承关系当中,创建子类对象,访问成员方法的规则,创建的对象是谁,就优先用谁,如果没有就网上找
注意事项
无论是成员方法还是成员变量,如果没有都是向上找父类,绝不会向下找子类
重写(Override)的概念
在继承关系中,方法的名称一样,参数列表也一样
注意不要和方法重载混淆
重写(Override):方法的名称一样,参数列表【也一样】,覆盖,覆写
重载(Overload):方法的名称一样,参数列表【不一样】
特点
创建的是子类对象,则优先用子类方法
多态
什么是多态:
我是一个学生,也是一个人类
代码中体现多态性,其实就是一句话:父类引用指向子类对象
格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
主程序:demo
public class demo {
public static void main(String[] args) {
//多态写法
//左侧父类的引用,指向右侧子类的对象
Fu obj = new Zi();
obj.method();
obj.methodFu();
}
}
父类:Fu
public class Fu {
public void method(){
System.out.println("子类方法");
}
public void methodFu(){
System.out.println("父类特有方法");
}
}
子类:Zi
public class Zi extends Fu{
}
运行结果
应用举例
主程序类:main
public class demo {
public static void main(String[] args) {
//如果不用多态的写法是:
Teacher one = new Teacher();
one.work();//讲师讲课
Assistant two = new Assistant();
two.work();//助教辅导
//多态写法
Employee one1 = new Teacher();
one1.work();//讲师讲课
Employee two1 = new Assistant();
two1.work();//助教辅导
}
}
员工类:Employee
public class Employee {
public void work(){
//一个work抽象类
};
}
教师类:Teacher
public class Teacher extends Employee{
//讲师,子类,继承父类Employee
public void work(){
System.out.println("讲师讲课");
}
}
助教类:Assistant
public class Assistant extends Employee{
//助教,子类,继承父类Employee
public void work(){
System.out.println("助教辅导");
}
}
多态的好处
无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化。
2 条评论
写得好好哟,我要给你生猴子!