day14

方法的重写和多态

1.为什么需要重写呢 有时父类的工作子类不一定需要 或者没有完全满足子类需求

2.方法重写需要有继承关系 重写时子类的方法和父类相同 但方法体不同

public class A extends B{
    @Override
    public void test() {
        System.out.println("A--test");
    }
}

public class B {
    public void test(){
        System.out.println("B-->test");
    }
}

public class Test {
    public static void main(String[] args) {

        //静态方法的调用只和左边的类型有关
        A a = new A();
        a.test();

        //父类的引用指向了子类
        B b = new A();//子类重写了父类的方法  方法重写不使用static修饰方法  静态方法只能被继承不能被重写
        b.test();

    }
}
/*
为什么需要重写:
1.父类的功能 子类不一定需要 或者不满足子类需求
AlT+Insert: override; 重写快捷键
 */

3.当AB类的方法使用static关键字修饰时:
输出结果为:
B–>test
A–>test
当AB类的方法不使用static关键字修饰时:
输出结果为:
A–test
A–test

即b是A new出来的对象,因此调用了A的方法
因为静态方法是类的方法 而非静态方法是对象的方法
有static时,b调用了B类的方法,因为b是用B类定义的
没有static时,b调用的是对象的方法,而b是用A类new的

4.AlT+Insert: override; 重写快捷键


多态:即同一方法可以根据根据发送对象不同而采取不同的行为方式。
一个对象的实例类型是确定的,但可以指向对象的引用类型很多。
1.多态是方法的多态,属性没有多态。
2.父类和子类直接要有联系 否则会抛出类型转换异常 ClassCastException。
3.存在条件:要有继承关系,方法需要重写,父类引用指向子类对象。 Father f1 = new Son();

当方法被一下修饰符 修饰时无法重写:
1.static 方法,属于类,被修饰的方法就不属于实例了。
2.final 常量。
3.private 方法,私有了不能重写。

public class Person {
    public void say(){
        System.out.println("Person say");
    }
}
/*
多态:即同一方法可以根据根据发送对象不同而采取不同的行为方式。
一个对象的实例类型是确定的,但可以指向对象的引用类型很多。
1.多态是方法的多态,属性没有多态。
2.父类和子类直接要有联系 否则会抛出类型转换异常 ClassCastException。
3.存在条件:要有继承关系,方法需要重写,父类引用指向子类对象。 Father f1 = new Son();

当方法被一下修饰符 修饰时无法重写:
1.static 方法,属于类,被修饰的方法就不属于实例了。
2.final 常量。
3.private 方法,私有了不能重写。
 */

public class Student extends Person{
    public void say(){
        System.out.println("Student say");
    }
    public void eat(){
        System.out.println("Student eat");
    }
}

public class Test01 {
    public static void main(String[] args) {
        //Student 能调用自身的方法和父类中的方法
        Student s1 = new Student();
        Person s2 = new Student();
        //对象能执行哪些方法主要和左边的类型有关  父类不能调用子类中的独有方法
        s1.say();
        s2.say();
        s1.eat();
        ((Student) s2).eat();//使用强制类型转换就可以调用
        //s2.eat();  父类型调用子类型中的独有方法时 报错
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值