一.继承
1.如何使用继承
编写父类
class Pet { //公共的属性和方法 }
编写子类,继承父类
class Dog extends Pet { //子类特有的属性和方法 }
只能继承一个父类
2.子类访问父类成员
访问父类构造方法: 使用super关键字,super代表父类对象,在子类的构造方法中调用,且必须是第一句
super(); super(name);
访问父类属性
super.name;
访问父类方法
super.print();
super关键字来访问父类的成员
super只能出现在子类的方法和构造方法中
super调用构造方法时,只能是第一句
super不能访问父类的private成员
子类能访问父类的所有资源吗?
不能被继承的父类成员:
- private成员
- 子类与父类不在同包,使用默认访问权限的成员
- 构造方法
3.访问修饰符总结
private : 本类
默认(friendly) : 本类, 同包
protected : 本类,同包,子类
public : 本类,同包,子类, 其他
4.多重继承关系的初始化顺序
父类属性 - > 父类构造方法 - > 子类属性 -> 子类构造方法
5.何时使用继承
- 当符合is-a关系时
继承是代码重用的一种方式:
将子类共有的属性和行为放到父类
6. 重写
构造方法会被重写吗?
不能被继承,因此不能重写。
方法重写的规则?
- 方法名相同
- 参数列表相同
- 返回值类型相同或者是其子类
- 访问权限不能严于父类
方法重载和方法重写
7.抽象类
abstract 关键字
可以用于类,也可以用于方法。
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类
8.final用法
final 用于类:表示类不能被其他类继承
public final class Penguin extends Pet { //… }
用于方法:表示方法不能被重写
public final void print () { //… }
用于属性:表示属性值不能被修改
public class Penguin { final String home ="南极";// 居住地 public void setHome(String name){ this.home=home; //错误,不可再赋值 } }
使用final修饰引用型变量,变量的值是固定不变的, 而变量所指向的对象的属性值是可变的
9. Object类
Object类是所有类的父类
一个类如果没有使用extends显示的继承另外一个类, 那么这个类就继承自Object类。
Object类的主要方法
(1)toString()方法
(2)equals()方法
10. 内部类
把一个类定义在另一个类的内部称为内部类
package cn.bjsxt.demo;//声明包 class Outer//声明类 { private String info="hello World";//声明私有属性 class Inner//声明类 { public void print(){//打印输出的方法 System.out.println(info); } } public void fun(){//定义方法 new Inner().print();//通过内部类调用方法 } } public class TestOuterAndInner2//测试类 { public static void main(String [] args){ new Outer().fun();//调用方法 } }