1.Java的继承语句格式
继承关键字:
extends
格式:
访问权限 class 子类名 extends 父类名{
}
说明:Java中的继承是单继承(一个子类只能继承一个父类)
2.子类继承到的父类的属性与方法
Java访问修饰符及其可被访问范围
private 在该类的{}中
默认的 同一个包下的任何类中
protected 在同一个包和不同包下的子类的{}中
public 同一工程中的任何类
子类继承父类后,子类就继承了父类所有的方法和属性。子类和子类对象能够直接调用的方法和属性分两种情况:
1.在同一包下:
1.私有的属性、方法和构造方法不能被子类和子类对象直接调用
2.默认的,受保护的和公有的属性和方法都可以被子类和子类的对象直接调用
2.在不同包下:
1.在子类的{}中,只有公有的,受保护的属性和方法能够被直接调用
2.子类对象调用方法时,只有公有的属性能够被调用
3.使用继承的好处:
1.提高代码的重用性 2.提高代码的扩展性
4.方法重写
1.必须存在一个继承关系
2.子类重写父类方法,子类重写方法的访问修饰符,方法名,返回值类型,参数都必须与父类方法相同,只有方法体不同。
重写后的方法调用时:
1.new 关键字后面的构造方法是那个类就调用那个类中的方法。
2.创建子类对象时,该对象会优先调用子类中的方法,子类中没有该方法时才会调用父类中的方法。
实现继承后,子类也可以重载父类中的方法
5.自动转型
定义方法和声明变量时,可用父类的类型来代替它所有的子类,实现自动转换。
要实现自动转型,必须存在继承。实现自动转型,可减少重复代码的编写。但是使用自动转型之后,不能调用子类中定义的方法。这是由于Java的编译机制引起的,Java编译时会根据对象名的类型,去该类中查找方法,方法存在编译,不存在就报错。
代
代码实例:
父类:People 子类:Bandit,Police
//创建对象
Police po=new Police();
Bandit ban=new Bandit();
People pol=new Police(); //自动转换
Bandit ba=new People();
//方法
父类中定义的方法:
public void hit(People po, Tool tl){
po.blood-=tl.attact;
System.out.println(name+"使用"+tl.name+"攻击;"+po.getName()+"血量减"+tl.attact);
}
子类对象对父类的方法进行调用:
ban.hit(po,knife);//调用继承的父类的方法,参数实现了自动转换(父类中的参 数为People类,po为Police)
子类中定义的方法:
public void arrest(){
System.out.println("土匪拒接投降!");
}
子类对象对子类中定义的方法进行调用
ba.arrest(); //若创建ba时,使用People ba=new Bandit();则在此处调用arrest()方法会报错
6.多态
Java的多态由方法重载,继承,方法重写,自动转换等技术引起。
继承关键字:
extends
格式:
访问权限 class 子类名 extends 父类名{
}
说明:Java中的继承是单继承(一个子类只能继承一个父类)
2.子类继承到的父类的属性与方法
Java访问修饰符及其可被访问范围
private 在该类的{}中
默认的 同一个包下的任何类中
protected 在同一个包和不同包下的子类的{}中
public 同一工程中的任何类
子类继承父类后,子类就继承了父类所有的方法和属性。子类和子类对象能够直接调用的方法和属性分两种情况:
1.在同一包下:
1.私有的属性、方法和构造方法不能被子类和子类对象直接调用
2.默认的,受保护的和公有的属性和方法都可以被子类和子类的对象直接调用
2.在不同包下:
1.在子类的{}中,只有公有的,受保护的属性和方法能够被直接调用
2.子类对象调用方法时,只有公有的属性能够被调用
3.使用继承的好处:
1.提高代码的重用性 2.提高代码的扩展性
4.方法重写
1.必须存在一个继承关系
2.子类重写父类方法,子类重写方法的访问修饰符,方法名,返回值类型,参数都必须与父类方法相同,只有方法体不同。
重写后的方法调用时:
1.new 关键字后面的构造方法是那个类就调用那个类中的方法。
2.创建子类对象时,该对象会优先调用子类中的方法,子类中没有该方法时才会调用父类中的方法。
实现继承后,子类也可以重载父类中的方法
5.自动转型
定义方法和声明变量时,可用父类的类型来代替它所有的子类,实现自动转换。
要实现自动转型,必须存在继承。实现自动转型,可减少重复代码的编写。但是使用自动转型之后,不能调用子类中定义的方法。这是由于Java的编译机制引起的,Java编译时会根据对象名的类型,去该类中查找方法,方法存在编译,不存在就报错。
代
代码实例:
父类:People 子类:Bandit,Police
//创建对象
Police po=new Police();
Bandit ban=new Bandit();
People pol=new Police(); //自动转换
Bandit ba=new People();
//方法
父类中定义的方法:
public void hit(People po, Tool tl){
po.blood-=tl.attact;
System.out.println(name+"使用"+tl.name+"攻击;"+po.getName()+"血量减"+tl.attact);
}
子类对象对父类的方法进行调用:
ban.hit(po,knife);//调用继承的父类的方法,参数实现了自动转换(父类中的参 数为People类,po为Police)
子类中定义的方法:
public void arrest(){
System.out.println("土匪拒接投降!");
}
子类对象对子类中定义的方法进行调用
ba.arrest(); //若创建ba时,使用People ba=new Bandit();则在此处调用arrest()方法会报错
6.多态
Java的多态由方法重载,继承,方法重写,自动转换等技术引起。