方法的重写(override):
**子类通过重写父类的方法,可以用自身的行为代替父类的行为,方法的重写是实现多态的必要条件。
方法的重写需要符合以下三个要点:**
1、“==” :方法名、形参、列表相同
2、“<=” : 返回值类型和声明异常类型,子类小于等于父类
3、“>=” :访问权限,子类大于等于父类
* 测试方法重写2.0
*/
package cn.wu.oo;
public class TestOverride1 {
public static void main(String[]args){
Animal a1 = new Animal();
Animal a2 = new Monkey();
Animal a3 = new Fish();
a1.Breathe();
a2.Motion();
a3.Motion();
}
}
class Animal{
public void Breathe(){
System.out.println("要呼吸!");
}
public void Motion(){
System.out.println("用运动系统活动");
}
}
class Monkey extends Animal{
public void Breathe(){ //重写父类的方法
System.out.println("用肺呼吸!");
}
public void Motion(){
System.out.println("用四肢运动!");
}
}
class Fish extends Animal{
public void Breathe(){ //重写父类的方法
System.out.println("用腮呼吸!");
}
public void Motion(){
System.out.println("用尾巴运动!");
}
}
final关键字:
作用:
1、修饰变量:被他修饰的变量不可改变,一旦赋了初值,就不能被重新赋值final int MAX_SPEED =120;
2、修饰方法:该方法不可被子类重写,但是可以重载final void study(){}
3、修饰类:修饰的类不可被继承,如 :Math.String等。final class A{}
/**测试final关键字
*
*/
package cn.wu.oo;
public final class TestFinal {
public final void shout(){
System.out.println("叫了一声!");
}
}
//class Dog extends TestFinal{ //不能继承被final修饰的类
// public void shout(){ //不能重写final修饰的方法
// System.out.println("汪汪汪");
// }
//}
继承和组合:
“组合”不同于继承,更加灵活。
“组合”的核心就是“将父类的对象作为子类的属性”然后,“子类通过调用该属性来获得父类的属性和方法”。
组合比较灵活,继承只有一个父类,但是组合可以有多个属性。
继承除了代码复用没也能方便我们对事物的建模。所以,对于“is-a”``关系建议用继承,“has-a”建议用组合。
class Person /*Person extends object**/{
String name;
int height;
public void rest(){
System.out.println("休息一会儿!");
}
}
class Teacher{
int Teacherid;
Person person = new Person();
Teacher(int Teacherid,String name,int height){
this.Teacherid = Teacherid;
this.person.name = name;
this.person.height = height;
}
}
**1、面向对象的三大特征:继承,封装,多态
2、继承的两个主要作用:代码复用更加容易的实现类的扩展和方便建模
3、JAVA中实现继承的关键字是:extends
4、JAVA中的类继承,是单继承,而接口可以多继承
5、子类继承父类可以获得除父类构造方法之外的所有但是不见得都能使用
6、定义类时,没有使用extend是,他的父类是Object
7、方法重写和方法重载的区别是:方法重写是子类对父类方法的重新改造,方法重载是类对自身的方法的调用。
**