手记

Java面向对象程序设计--继承(笔记)

继承

将重复的代码抽取到父类
使用继承优化设计

子类与父类是is-a关系
可以有多个子类 只能有一个父类pet

如何使用继承
1 把重复的属性跟方法放在一个类里
class pet{
//公共的属性和方法
}

//狗类

//加extends就把原来pet里面的属性跟方法调用
每个子类只能继续一个父类
class Dog extends Pet{
//子类特有的属性和方法
}
//企鹅类
class penguin extends Pet{
}

子类访问父类成员
访问父类构造方法
//使用super关键字,super代表父类对象
在子类构造方法中调用且必须是第一句
super(); 默认无参方法
super(name);
访问父类属性
super.name;
访问父类方法
super.print();
public static void main(String[] args){
1)实例化子类对象,默认会先执行父类的无参构造,在执行子类的无参构造
Dog dog=new Dog();
dog.print();
}
2)实例化子类的有参数构造时,使用super(参数)重复调用父类中的有参数构造,默认 直接调用父类中的有参构造,不会调用父类中的无参数构造.
Dog dog2=new Dog("熊熊",100,90,"拉布拉多犬");
dog2.print();

Dog peng=new penguin("qq",100,90,"Q仔");
peng.print();}}

用super调用父类中的方法
super.getName();

子类不能继承父类中私有变量和私有方法
子类与父类不同包,使用默认访问权限的成员不能访问
不能继承父类的有参构造方法,必须使用super,无参可以被继承

访问修饰符 protected
可以修饰属性和方法
本类 同包 子类可以访问

访问修饰符总结
private 本类√ 同包× 子类× 其他×
默认(friendly) 本类√ 同包√ 子类× 其他×
protected 本类√ 同包√ 子类√ 其他×
public 本类√ 同包√ 子类√ 其他√

多重继承关系的初始化顺序
父类属性-父类构造方法-子类属性-子类构造方法

继承是代码重用的一种方式
将子类公有的属性和行为放到父类中

方法重写
子类重写父类的方法
调用父类的print()方法,不能显示Dog的strain信息和Penguin的sex信息

构造方法不能被继承,因此不能重写
方法重写的规则
方法名相同
参数列表相同
返回值类型相同或者是其子类
访问权限不能严于父类

方法重载和方法重写的区别
1)方法重写
位置:子类
方法名:相同
参数表:相同
返回值:相同或者是其子类
访问修饰符:不能比父类更严格
2)方法重载
位置:同类
方法名:相同
参数表:不相同
返回值:无关
访问修饰符:无关

super关键字来访问父类的成员
super只能出现在子类的方法和构造方法
super调用构造方法时,只能是第一句
super不能访问父类的private(私有的)成员和方法

抽象类abstract 限制实例化
1)父类没有必要实例化,采取将父类定义成抽象类
语法
public abstract class 类名{}
2)抽象类中的方法未必都是抽象方法
抽象方法必须在抽象类中
父类中定义的方法,必须由子类去实现,每个子类实现的内容(方法体)不同,采取父 类定义的抽象方法
3)抽象方法没有方法体
4)抽象方法必须由子类全部实现
5)抽象类不能被实例化

public abstract class Pet{
}
abstract 可用于方法-抽象方法
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被发现,除非子类是抽象类;
public abstract void print(); //没有方法体

final用法 最终的
1)final 修饰的类不能被继承
2)final修饰的属性 不可以修改的属性 是常量
3)final修饰的方法不能被重写

使用final修饰引用型变量,变量不可以再指向另外的对象
用final修饰引用型变量,变量的值是固定不变的,而变量所指向的对象的属性值是可变的

public final class Penguin{
public String sex;
}

总结

抽象类和抽象方法
抽象类不能被实例化
可以有0-多个抽象方法
非抽象类必须重写父类的所有抽象方法

final修饰符
修饰的类,不能再被继承
修饰的方法,不能被子类重写
修饰的变量将变成常量,只能在初始化时进行赋值

1人推荐
随时随地看视频
慕课网APP