之前主要了解了面向对象的基本概念,接下来的部分属于面向对象的三大特征:继承、封装、多态
1.继承(extends)
继承让我们更加容易实现类的扩展。子类继承父类,是父类的扩展,实现了代码的重用。
假如我们写一个人类,有姓名和年龄的属性,有吃的功能,
再写一个学生类,有姓名和年龄和学号的属性,有吃的功能,有学的功能
例:
此时代码很复杂,你会发现人类的属性和功能在学生类中都有,写起来比较麻烦,这时就可以用到继承
将学生类中和人类中相同的属性和功能删掉,再写上继承的关键字以及被继承的类名
例:
此时学生类就拥有了人类的所有属性和方法。
注:
1.父类也成为超类,基类,派生类
2.java中类只有单继承,没有c++中的多继承。java中一个儿子只有一个爹,一个爹可以有多个儿子。
3.java中用多接口来实现多继承,接口可以多继承,类只能单继承
4.子类可以得到父类的所有属性和方法(父类构造方法除外),但是不见得可以直接访问(例如:父类的私有属性和私有方法)
5.如果定义一个类没有extends声明父类,那么默认父类为java.lang.Object。
2.instanceof运算符
instanceof是二元运算符,左边是对象,右边是类,当对象是右边类或其子类所创建的对象时,返回true,否则false
例:
3.方法的重写
方法的重写表示子类重写父类的方法
比如,父类有个a()方法,子类使用时候发现不符合自己的要求,就可以进行重写
子类通过重写父类的方法,可以用自身的行为替换父类的行为。
重写三个要点:
1.方法名,形参列表相同
2.返回值类型和声明异常类型相,子类小于等于父类
3.访问权限,子类大于父类
例:
4.super关键字
super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或者属性
super的其他用法
若构造方法的第一行代码没有显示的调用Super(...)或者this(...),那么java默认都会调用super(),含义是调用父类的无参构造函数,这里的super()可以省略
构造方法的第一句总是super(),来调用父类对应的构造方法。
所以构造方法调用流程是,先向上追溯到Object,再依次向下执行类的初始化块和构造方法,直到子类为止。
例:
groups.tianya.cn/post-3678-2bc837af4c4a45ebb5ba324339c53d8c-1.shtmlgroups.tianya.cn/post-3678-703eb74f83544c3f9efaf6a785bd1050-1.shtmlgroups.tianya.cn/post-3678-322065f868a94f8c954e9f91b3ce0095-1.shtmlgroups.tianya.cn/post-3678-37a51a9d1ca3454b98dad4bc0b65ba8a-1.shtmlgroups.tianya.cn/post-3678-bcc21bd53a9c432c87f5b6747cca3ae4-1.shtmlgroups.tianya.cn/post-3678-7336cb57ffab460caa00f7c19b89d244-1.shtmlgroups.tianya.cn/post-3678-4cd176c9eca6472abd276692e7b46a91-1.shtmlgroups.tianya.cn/post-3678-f234adae068647c8b532f41595c01bb1-1.shtmlgroups.tianya.cn/post-3678-1ff115129a754537bf69d77343ffb23f-1.shtmlgroups.tianya.cn/post-3678-87d5c9620d2d437cb49d0a4bcdf0b24f-1.shtmlgroups.tianya.cn/post-3678-7ef9534b2c7a4a7aa9ab6511c1303c9d-1.shtmlgroups.tianya.cn/post-3678-8c33255c10da43d698a55fcfb0d68aa3-1.shtml