DAY20

继承

方法重写

package com.oop;
public class Application{
    public static void main(String[] args){
      //静态的方法和非静态的方法区别很大
      //静态方法:
      //方法的调用只和左边,定义的数据类型有关
      A a = new A;
      a.text();//A
      //父类的引用指向子类
      B b = new A();
      b.text();//B
    }
}
package com.oop.demo01;
//继承
public class A extends B{
   //override 重写
   @Override//注释:有功能的注释
    public static void text(){
        System.out.println("A=>text()");
    }
}
package com.oop.demo01;
//重写都是方法的重写,和属性无关
public class B {
    public static void test(){
        System.out.println("B=>text()");
    }
}
  

注:需要有继承关系,子类重写父类的方法

  1. 方法名必须相同

  2. 参数列表 列表必须相同

  3. 修饰符:范围可以扩大但不能缩小:public>Protected>Default>private

  4. 抛出的异常:范围,可以被缩小,但不能被扩大:ClassNotFoundException-->Exception(大)

重写,子类的方法和父类必须一致:方法体不同

为什么需要重写:

  • 父类的功能,子类不一定需要,或者不一定满足

  • alt+inset;override;

多态

即同一方法可以根据发送对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

多态存在的条件:

  1. 有继承关系

  2. 子类重写父类的方法

  3. 父类引用指向子类对象

注:多态的是方法的多态,属性没有多态性

package com.oop.demo02;
​
public class Student extends Person{
        @Override
    public void run(){
        System.out.println("son");
    }
    public void eat(){
        System.out.println("ear");
    }
}
/*
多态注意事项:
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系,类型转换异常  ClassCastException!
3.存在条件:继承关系,方法需要重写,父类引用指向子类对象  Father f1 = new Son();
   1.static 方法,属于类,它不属于实例
   2.final 常量;
   3.private 方法;
*/
package com.oop.demo02.person;
import com.oop.demo02.Student;
public class Application{
    public static void main(String[] args){
    //一个对象的实际类型是确定的
    //new Student();
    //new Person();
    //可以指向的引用类型就不确定了:父类的引用指向子类
        
    //Student 能调用的方法都是自己的或者继承父类的
    Student s1 = new Student();
    //Person 父类型,可以指向子类,但不能调用子类独有的方法
    Person s2 = new Student();
    Object s3 = new Student();
    //对象能执行哪些方法,主要看对象左边的类型,和右边的关系不大
    ((Student) s2).eat();//子类重写父类的方法,执行子类的方法
    s1.eat();
    }
}

instanceof 和类型转换

package com.oop;
import java.util.Scanner;
public class Application{
    public static void main(String[] args){
     //Object > String
     //Object > Person > Teacher
     //Object > Person > Student
     Object object = new Studdent();
     System.out.println(object imstanceof Student);//true
     System.out.println(object imstanceof Person);//true
     System.out.println(object imstanceof Object);//true
     System.out.println(object imstanceof Teacher);//False         
     System.out.println(object imstanceof String);//False
     System.out.println("========================");
     
     Person person = new Student();
     System.out.println(person imstanceof Student);//true
     System.out.println(person imstanceof Person);//true
     System.out.println(person imstanceof Object);//true
     System.out.println(person imstanceof Teacher);//False
     System.out.println(person imstanceof String);//编译报错
     System.out.println("========================");
     
     Student student = new Student();
     System.out.println(studdent instanceof Student);//true
     System.out.println(studdent instanceof Person);//true
     System.out.println(studdent instanceof Object);//true
     //System.out.println(studdent instanceof Teacher);//编译错误
     //System.out.println(studdent instanceof String);//编译错误
    }
}
package com.oop;
import com.oop.demo03.Person;
import com.oop.demo03.Student;
import com.oop.demo03.Teacher;
import java.util.Scanner;
public class Application{
    public static void main(String[] args){
    //类型之间的转化: 父  子
    //子类转换为父类,可能丢失自己的本来的一些方法
    Student student = new Student();
    student.go();
    Person person = student;
        
    }
}
/*
1.父类引用指向子类的对象
2.把子类转换为父类,向上转型
3.把父类转换为子类,向下转型;强制转换
4.方便方法的调用,减少重复的代码
抽象:封装,继承,多态
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值