多态 instanceof 类型转换

多态 instanceof 类型转换

package Java学习.chen.haha.ac.dome3;

public class person {
    public Object eat;

    public void run(){//写个方法
        System.out.println("run");

    }
}
package Java学习.chen.haha.ac.dome3;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class student extends person {
    @Override
    public void run() {
        System.out.println("so");
    }
    public void eat(){
        System.out.println("jump");
    }
}
package Java学习.chen.haha.ac.dome3;

import com.sun.org.apache.xpath.internal.objects.XObject;

public class application {
    public static void main(String[] args) {
        //new student();
        //一个对象的实际类型是确定的
        //可以指向的引用类型就不确定了


        //可以指向的引用类型就不确定了 父类的引用指向子类
        //student能调用的方法都是自己的或者继承父类的
        student s1 = new student();//子类引用
        //person父类可以指向子类,但是不能调用子类独有的方法
        person s2 = new student();//父类引用
        Object s3 = new student();

        //对象能执行那些方法 主要和左边有关  和右边关系不大
      // s2.eat //因为父类person没有eat方法

        s2.run();//运行时调用
    }
}

多态的注意事项

多态是方法的多态不是属性的,属性没有多态

父类和子类有联系 类型转换异常 classCastExcepttion

存在条件;继承关系方法需要重写,父类引用指向子类对象!father s1 = new son();

1static 属于类他不属于实例

2final 常量不能被重写

3private方法 私有不能被重写

## instanceof

package Java学习.chen.haha.ac.dome3;

public class person {


}
package Java学习.chen.haha.ac.dome3;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class student {

}
package Java学习.chen.haha.ac.dome3;

import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

public class application {
    public static void main(String[] args) {
        //instanceof 判断有没有父子关系 object>person.student
     
    //有继承关系才会转
        Object object = new student();
        System.out.println(object instanceof student);//TURE
        System.out.println(object instanceof person);//FALSE
        System.out.println(object instanceof Object);//TURE
    }
}

类型转换

子类转向父类 向上转型直接转 丢失子类中原本可直接调用地特有方法

父类转子类 向下转型会丢失父类被子类所重写掉的方法

方便方法的调用 减少重复的代码

package Java学习.chen.haha.ac.dome3;

public class person {
    public void go(){
        System.out.println("go");
    }


}
package Java学习.chen.haha.ac.dome3;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class student extends person {
    public void po(){
        System.out.println("po");

    }

}
package Java学习.chen.haha.ac.dome3;

import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

public class application {
    public static void main(String[] args) {
         person jay = new student();
         //类型之间的转换父与子    由高到低
        student student = (student) jay;
        student.go();
        ((student)jay).go();//编译看左运行看右  父转子
        person person = student;//子转父

    }
}
posted @ 2021-05-03 15:17  陈诚成  阅读(55)  评论(0)    收藏  举报