Java基础(极客)——15、Java面向对象多态性

package com.zhh.java.duotaixing;

/**1、Java面向对象多态性
 * 1多态性的体现
 * 1)方法的重写与重载
 * 2)对象的多态性
 * 2对象的多态性
 * 向上转型,程序自动完成
 * 父类 父类对象= 子类实例
 * 向下转型,强制类型转换
 * 子类 子类对象=(子类)父类实例
 * (和基本数据类型的转换是一样的)
 * 
 */

class Father {
    public void tell1() {
        System.out.println("Father----tell1");

    }

    public void tell2() {
        System.out.println("Father----tell2");

    }

}//class

class Son extends Father {
    //重写父类的tell1方法
    @Override
    public void tell1() {
        System.out.println("Son----tell1");

    }

    public void tell3() {
        System.out.println("Son----tell3");

    }

}

public class DuoTaiDemo1 {

    public static void main(String[] args) {
        method2();
    }

    /**
     * 向上转型
     * 子类转型成父类
     */
    public static void method1() {
        Son son = new Son();
        Father father = son;//向上转型
        father.tell1();//重写之后调用的是被重写之后的tell1,也就是子类的tell;
        father.tell2();
        //无法调用tell3

    }

    /**
     * 向下转型
     * 父类转型成子类
     */
    public static void method2() {
        Father father = new Son();
        Son son = (Son) father;//父类转型成子类(父类转型子类之前,必须子类转成父类 即:Father father = new Son())
        son.tell1();
        son.tell2();
        son.tell3();

        //        Father father2 = new Father();
        //        Son son2 = (Son) father2; //这种写法会产生类型转换失败异常 java.lang.ClassCastException

    }
}


package com.zhh.java.duotaixing;

/**
 * 2、Java面向对象多态性的应用
 * 
 */

public class DuoTaiDemo2 {
    public static void main(String[] args) {
        /*这个方法中要的是父类的对象,我们传一个子类的对象就可以了
         *相当于向上转型
         * Son son = new Son();
           Father father = son;//向上转型 
         * 
         */
        method1(new Son1());
        method1(new Son2());
        method1(new Son3());

    }

    public static void method1(Father1 father1) {
        father1.father1Tell();

    }

}

class Father1 {
    public void father1Tell() {
        System.out.println("Father1----father1Tell");
    }

}

class Son1 extends Father1 {
    public void son1Tell() {
        System.out.println("Son1----son1Tell");
    }

}

class Son2 extends Father1 {
    public void son2Tell() {
        System.out.println("Son2----son2Tell");
    }

}

class Son3 extends Father1 {
}



package com.zhh.java.duotaixing;

/**
 * 3、Java面向对象instanceof关键字
 * instanceof判断对象是不是这个类的对象
 * 
 */

class Father01 {
    public void tell1() {
        System.out.println("Father----tell1");

    }

    public void tell2() {
        System.out.println("Father----tell2");

    }

}//class

class Son01 extends Father01 {
    //重写父类的tell1方法
    @Override
    public void tell1() {
        System.out.println("Son----tell1");

    }

    public void tell3() {
        System.out.println("Son----tell3");

    }

}

public class IntenceOfDemo {

    public static void main(String[] args) {
        Father01 father01 = new Father01();
        //判断father01是不是Father01的对象
        boolean isProject1 = father01 instanceof Father01;
        //判断father01是不是Son01的对象
        boolean isProject2 = father01 instanceof Son01;
        System.out.println(isProject1);
        System.out.println(isProject2);
        /*打印结果是
         * true
           false
         */

        Father01 father02 = new Son01();
        boolean isProject3 = father02 instanceof Father01;
        boolean isProject4 = father02 instanceof Son01;
        System.out.println(isProject3);
        System.out.println(isProject4);

        /*打印结果是
         * true
           true
                              可见向下转型之后对象既是子类对象又是父类对象
                               实际上是父类对象,因为对象调不到子类中的tell3()方法
         */

    }

}



package com.zhh.java.duotaixing;

/**
 * 4、Java面向对象抽象类应用
 * 
 */
abstract class Person {
    private String name;
    private int    age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    abstract void want();

}

class Student extends Person {
    private int score;

    public Student(String name, int age, int score) {
        super(name, age);
        this.score = score;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    void want() {
        System.out.println("姓名" + getName() + "年龄" + getAge() + "成绩" + getScore());
    }
}

class Worker extends Person {
    private int money;

    public Worker(String name, int age, int money) {
        super(name, age);//调用父类的构造方法,如果删掉会默认为 super(name, age)
        this.money = money;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    @Override
    void want() {
        System.out.println("姓名" + getName() + "年龄" + getAge() + "收入" + getMoney());
    }

}

public class ChouXingLeiDemo1 {

    public static void main(String[] args) {
        Student student = new Student("aaa", 12, 12);
        student.want();
        Worker worker = new Worker("bbb", 35, 35);
        worker.want();
    }

}



package com.zhh.java.duotaixing;

/**
 *5、Java面向对象接口的使用 
 *这个程序设计还是很好的,需要反复看
 *
 */
/**
 * 定义use接口
 */
interface Usb {
    void Start();

    void stop();

}

/**
 * 定义一个电脑类,传递Usb接口
 * 
 */
class Computer {
    public static void work(Usb usb) {
        usb.Start();
        System.out.println("正在工作。。。");
        usb.stop();
    }

}

/**
 * 写一个U盘的类
 * 
 */
class UPan implements Usb {

    @Override
    public void Start() {
        System.out.println("u盘开始工作");
    }

    @Override
    public void stop() {
        System.out.println("u盘结束工作");
    }

}

/**
 * 
 * 写一个打印机的类
 */
class Printer implements Usb {

    @Override
    public void Start() {
        System.out.println("打印机开始工作");
    }

    @Override
    public void stop() {
        System.out.println("打印机结束工作");
    }

}

/**
 * 用来调用的类,是程序入口
 * 
 */
public class JieKouDemo1 {

    public static void main(String[] args) {
        new Computer().work(new UPan());
        new Computer().work(new Printer());

    }

}
源码下载:
http://download.csdn.net/detail/zhaihaohao1/8741715
视频下载:
http://c38.yunpan.360.cn/my/index/#%2F%E7%A8%8B%E5%BA%8F%E5%BC%80%E5%8F%91%2Fjava%2F


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值