继承:
一、为什么需要继承?
解决代码重复的问题
二、理解继承
(一)、子类访问父类成员
1、使用super关键字
2、
访问父类属性:
super.name;
3、 访问父类方法:
super.print();
(二)、
有些父类成员不能继承
1、private成员
2、子类与父类不在同包,使用默认访问权限的成员
3、构造方法
(三)、访问修饰符总结
(四)、集继承后的初始化顺序
父类属性 ---->
父类构造方法
---->
子类属性---->
子类构造方法
Object关键字
在Java 中,所有的Java类都直接或间接地继承了java.lang.Object类
final关键字
Java中声明类、属性和方法时,可使用关键字final来修饰。注意事项:
1、final标记的类不能被继承。
2、
final标记的方法不能被子类重写。
3、
final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
4、public static final共同标记常量时,这个常量就成了全局的常量。
eg:1、public static final int MAXCOUNT=10;
2、final Sting NAME=“SUN”;
子类重写父类方法
即子类中有和父类相同签名的方法
构造方法也会被重写吗?
不能被继承因此不能重写
一个类能得到构造方法,只有两个办法。
1、写构造方法: 可以在子类构造方法中用super(参数列表)调用父类的构造方法并且super()必须是第一个被执行的语句
2、有构造方法,使用缺省构造方法
抽象类
一、什么叫抽象类?
以下代码有什么问题?
Pet pet = new Pet ("贝贝",20,40);
pet.print();
初始化父类实例对象Pet,没有实际意义,因为所有的宠物不可能都叫“贝贝”
所以Java中也使用抽象类,限制父类无意义的实例化
public abstract class Pet {
}
抽象方法
abstract也可用于方法——抽象方法
几点说明:
1、抽象方法没有方法体
2、抽象方法必须在抽象类里
3、抽象方法必须在子类中被实现,除非子类是抽象类
final用法
final用于:
1、类不希望再被其他类继承
public final class Penguin extends Pet {
//…
}
2、
方法不希望被重写
public final void print () {
//…
}
3、
属性值不希望被修改
多态
一、为什么使用多态?
例如宠物生病了,需要主人给宠物看病 不同宠物看病过程不一样,所以需要多态。
简单来说,多态是具有表现多种形态的能力的特征 同一个实现接口,使用不同的实例而执行不同操作
二、如何使用多态
使用多态实现思路
1、编写父类
2、编写子类,
子类重写父类方法
3、运行时,使用父类的类型,子类的对象
例:
父类:
abstract class Printer(){
print(String str);
}
子类1:
class ColorPrinter () extends class Printer{
print(String str) {
System.out.println("输出彩色的"+str);
}
}
子类2:
class BlackPrinter ()
extends class Printer{
print(String str) {
System.out.println("输出黑白的"+str);
}
}
调用
public static void main(String[] args) {
Printer p = new ColorPrinter();//用子类初始化父类对象
p.print();
p = new BlackPrinter();
p.print();
}
方法重写
一、方法重写的规则
1、在继承关系的子类中
2、 重写的方法名、参数、返回值类型必须与父类相同
3、私有方法不能继承因而也无法重写
二、方法重写与方法重载的区别
1、方法重载是在初始化时,对默认初始化方法进行修改
2、发放重写是子类对父类的同名方法进行修改
instanceof运算符
public class TestPoly2 {
public static void main(String[] args) {
// Pet pet = new Penguin("楠楠", "Q妹");
Pet pet = new Dog("欧欧", "雪娜瑞");
pet.eat();
if (pet instanceof Dog) { //判断该对象是不是Dog类
Dog dog = (Dog) pet;
dog.catchingFlyDisc();
} else if (pet instanceof Penguin) {
Penguin pgn = (Penguin) pet;
pgn.swimming();
}
}