赞
踩
目录
继承、super、this、抽象类:(DAY-1)分为四个部分说明!
要理解面向对象思想,我们先要知道什么是对象?
《Java编程思想》中提到“万物皆为对象”的概念。它将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。
面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为。
类是面向对象中的一个很重要的概念,因为类是很多个具有相同属性和行为特征的对象所抽象出来的,对象是类的一个实例。
类具有三个特性:封装、继承和多态。
JAVA分为三种(OOA,OOD,OOP)
分别为:面向对象分析,面向对象设计,面向对象程序
概述:多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。如图所示:
好处:
- class 父类 { ... }
- class 子类 extends 父类 {
- ...
- }
- /** 定义员工类Employee,做为父类
- */ class Employee { String name; // 定义name属性 // 定义员工的工作方法 public void work() {
- System.out.println("尽心尽力地工作"); }
- }/** 定义讲师类Teacher 继承 员工类Employee */ class Teacher extends Employee {
- // 定义一个打印name的方法 public void printName() {
- System.out.println("name=" + name); }
- }
- /** 定义测试类 */ public class ExtendDemo01 { public static void main(String[] args)
- {
- // 创建一个讲师类对象 Teacher t = new Teacher();
- // 为该员工类的name属性进行赋值 t.name = "小明";
- // 调用该员工的printName()方法 t.printName();
- // name = 小明
- // 调用Teacher类继承来的work()方法 t.work(); // 尽心尽力地工作 }
- }

在父子类的继承之中,如果成员变量重名,则创建子类对象时,访问有两种方式:
直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找。
间接通过成员方法访问成员变量:
备注:该方法属于谁,就优先用谁,没有则向上找。
代码案例:
- class Fu {
- // Fu中的成员变量。 int num = 5;
- }class Zi extends Fu {
- // Zi中的成员变量 int num2 = 6;
- // Zi中的成员方法 public void show() {
- // 访问父类中的num, System.out.println("Fu num="+num);
- // 继承而来,所以直接访问。
- // 访问子类中的num2 System.out.println("Zi num2="+num2); }
- }class ExtendDemo02
- {
- public static void main(String[] args) {
- //
- 创建子类对象 Zi z = new Zi();
- // 调用子类中的show方法 z.show(); }
- }
局部变量 直接写成员变量名字
本类的成员变量 this.成员变量名
父类的成员变量 super.成员变量名
在父子类的继承关系当中,创建子类对象,访问成员方法的规则:创建的对象是谁,就优先an用谁,如果没有则向上找。
注意事项:
无论是成员方法还是成员变量,如果没有
重写(Override)和重载不一样(记得区分)
概念:在继承关系当中,方法的名称一样,参数列表也一样。
重写(Override):方法的名称一样,参数列表【也一样】。覆盖、覆写。
重载(Overload):方法的名称一样,参数列表【不一样】。
方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。(new的是谁,用的就是谁)
1.必须保证父子类之间方法的名称相同,参数列表也相同。
@Override:写在方法前面,用来检测是不是有效的正确覆盖重写。6
这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。
2.子类方法的返回值必须【小于等于】父类方法的返回值范围。
前提:
java.lang.Object类是所有类的公共最高父类(祖宗类),java.lang.String就是Object的子类。
3.子类方法的权限必须【大于等于】父类方法的权限修饰符。
小扩展提示:public > protected > (default) > private
备注:
(default)不是关键字default,而是什么都不写,留空。
super关键字的用法有三种:
1.在子类的成员方法中,访问父类的成员变量
2.在子类的成员方法中,访问父类的成员方法
3.在子类的构造方法中,访问父类的构造方法
super.父类成员变量名
- class Zi extends Fu {
- Zi中的成员变量 int num = 6; public void show() {
- 访问父类中的num System.out.println("Fu num=" + super.num);
- 访问子类中的num System.out.println("Zi num=" + this.num); }
- }
tip:
设计原则:
对于已经投入使用的类,尽量不要进行修改。推荐定义一个新的类,来重复利用其中共性内容,并且添加改动新内容!
继承关系中,父类构造方法的访问特点:
1.子类构造方法当中有一个默认隐含的“super()”调用,所以一定是先调用的父类构造,后执行的子类构造
2.可以通过super关键字来子类构造调用父类重载构造
3.super的父类构造调用,必须是子类构造方法的第一个语句。不能一个子类构造调用多次super构造
总结:
子类必须调用父类构造方法,不写则赠送super();写了则用写的指定的super调用,super只能有一个,还必须是第一个。
class Fu { public void show() { System.out.println("Fu show"); } } class Zi extends Fu { //子类重写了父类的show方法 public void show() { System.out.println("Zi show"); } } public class ExtendsDemo05{ public static void main(String[] args) { Zi z = new Zi(); // 子类中有show方法,只执行重写后的show方法 z.show(); // Zi show } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。