Java学习第二十九天<方法重写><多态><多态细节><动态绑定机制><object类><多态数组><多态参数>

方法重写

package chapter07.D4方法重写;
​
public class Animal {
    public  void cry() {
        System.out.println("动物叫唤...");
    }
    public Object m1(){
        return null;
    }
    protected void eat(){
​
    }
}

package chapter07.D4方法重写;
​
public class Dog extends Animal{
    public  void cry() {//子类方法名,参数要和父类完全一致
        System.out.println("狗叫唤...");
    }
    public String m1(){//返回类型可以是父类下级
        return null;
    }
    public void eat(){//子类不缩小父类权限,只可扩大
​
    }
}

package chapter07.D4方法重写;
​
public class Override01 {
    public static void main(String[] args) {
​
    }
}

多态

package chapter07.D5多态;
​
public class Animal {
    private String name;
​
    public Animal(String name) {
        this.name = name;
    }
​
    public String getName() {
        return name;
    }
​
   /* public void setName(String name) {
        this.name = name;
    }*/
}

package chapter07.D5多态;
​
public class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }
​
}

package chapter07.D5多态;
​
public class Cat extends Animal{
    public Cat(String name) {
        super(name);
    }
}

package chapter07.D5多态;
​
public class Food {
    private String name;
​
    public Food(String name) {
        this.name = name;
    }
​
    public String getName() {
        return name;
    }
​
  /*  public void setName(String name) {
        this.name = name;
    }*/
}

package chapter07.D5多态;
​
public class Bone extends Food{
    public Bone(String name) {
        super(name);
    }
}

package chapter07.D5多态;
​
public class Fish  extends Food {
    public Fish(String name) {
        super(name);
    }
}

package chapter07.D5多态;
​
public class Master {
    private String name;
​
    public Master(String name) {
        this.name = name;
    }
    //主人喂食物
    /*public void feed(Dog d,Bone b){//传对象
        System.out.println("主人"+name+"给"+d.getName()+"喂了"+b.getName());//父类的方法
    }
    public void feed(Cat cat,Fish fish){
        System.out.println("主人"+name+"给"+cat.getName()+"喂了"+fish.getName());
    }*/
    //简化
    public void feed(Animal animal,Food food){//父类Animal 可以接受子类对象 同理Food
        System.out.println("主人"+name+"给"+animal.getName()+"喂了"+food.getName());
    }
}

package chapter07.D5多态;
​
public class Poly01 {
    public static void main(String[] args) {
        Master tom = new Master("Tom");
        Master jack = new Master("Jack");
        Dog ww = new Dog("汪汪");
        Bone gt = new Bone("炭烤骨头");
        Animal wc = new Dog("旺财");//编译类型可以为父类,向上转型
        Bone mz = new Bone("蜜汁骨头");
        jack.feed(wc,mz);
        tom.feed(ww,gt);
​
    }
​
}

多态细节

package chapter07.D5多态.Detail;
​
public class Animal {
    String name="动物";
    int age=10;
    public void sleep(){
        System.out.println("睡");
    }
    public void run(){
        System.out.println("跑");
    }
    public void eat(){
        System.out.println("吃");
    }
    public void show(){
        System.out.println("你好");
    }
}

package chapter07.D5多态.Detail;
​
public class Cat extends Animal{
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

package chapter07.D5多态.Detail;
​
public class PolyDetail {
    public static void main(String[] args) {
        Animal animal = new Cat();
        //animal对象可调用父类所有成员(私有除外),但不能调用子类
        //编译类型决定能调用哪些成员,执行类型决定从谁开始向上找方法
        animal.run();
​
        //若要调用Cat的catchMouse方法,要向下转型(强转)
        //语法 子类类型 引用名=(子类类型)父类引用;要求:animal原先是指向子类Cat的,animal转成Dog型就不行,因为原来不指向Dog
        Cat cat=(Cat)animal;//编译类型为子类Cat,运行类型Cat,相当于生成新的cat对象指向Cat
        cat.catchMouse();
        cat.eat();//能调用子类父类所有方法,优先自己的
    }
}

package chapter07.D5多态.Detail;
​
public class PolyDetail02 {
    public static void main(String[] args) {
       Base base = new Sub();
        System.out.println(base.count);//编译类型决定能调用哪些成员,10
        Sub sub=new Sub();
        System.out.println(sub.count);//20
    }
​
}
class Base{
    int count=10;
}
class Sub extends Base{
    int count=20;
}

package chapter07.D5多态.Detail;
​
public class PolyDetail02 {
    public static void main(String[] args) {
       Base base = new Sub();
        System.out.println(base.count);//编译类型决定能调用哪些成员,10
        Sub sub=new Sub();
        System.out.println(sub.count);//20
    }
​
}
class Base{
    int count=10;
}
class Sub extends Base{
    int count=20;
}

package chapter07.D5多态.Detail;
​
public class PolyDetail02 {
    public static void main(String[] args) {
       Base base = new Sub();
        System.out.println(base.count);//编译类型决定能调用哪些成员,10
        Sub sub=new Sub();
        System.out.println(sub.count);//20
    }
​
}
class Base{
    int count=10;
}
class Sub extends Base{
    int count=20;
}

package chapter07.D5多态.Detail;
​
public class PolyDetail03 {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB);//判断执行是否属于XX类
        System.out.println(bb instanceof AA);
        AA aa =new BB();
        System.out.println(aa instanceof AA);
        System.out.println(aa instanceof BB);
        Object obj=new Object();
        System.out.println(obj instanceof AA);
    }
}
class AA{
​
}
class BB extends AA{
​
}

package chapter07.D5多态.Detail;
​
public class PolyDetail03 {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB);//判断执行是否属于XX类
        System.out.println(bb instanceof AA);
        AA aa =new BB();
        System.out.println(aa instanceof AA);
        System.out.println(aa instanceof BB);
        Object obj=new Object();
        System.out.println(obj instanceof AA);
    }
}
class AA{
​
}
class BB extends AA{
​
}

package chapter07.D5多态.Detail;
​
public class PolyDetail03 {
    public static void main(String[] args) {
        BB bb = new BB();
        System.out.println(bb instanceof BB);//判断执行是否属于XX类
        System.out.println(bb instanceof AA);
        AA aa =new BB();
        System.out.println(aa instanceof AA);
        System.out.println(aa instanceof BB);
        Object obj=new Object();
        System.out.println(obj instanceof AA);
    }
}
class AA{
​
}
class BB extends AA{
​
}

动态绑定机制

package chapter07.D5多态.Detail;
​
public class DynamicBinDing {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());//30 只能调用A类里的成员方法,该方法在B类相同的没有,则用A类,A类没有B类有要强转
        //两者都有用B类,A有B没有用A类,A没有B有要强转
        System.out.println(a.sum1());//20
    }
​
}
class A{
    public int i= 10;
    public int sum(){
        return getl()+10;//回到执行类的方法(动态绑定)
    }
    public int sum1(){//属性没有动态绑定,谁有就先用谁
        return i+10;
    }
    public int getl(){
        return i;
    }
}
class B extends A{
    public int i =20;
//    public int sum(){
//        return i+20;
//    }
    public int getl(){
        return i;
    }
//    public int sum1(){
//        return i+10;
//    }
}

package chapter07.D5多态.Detail;
​
public class DynamicBinDing {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());//30 只能调用A类里的成员方法,该方法在B类相同的没有,则用A类,A类没有B类有要强转
        //两者都有用B类,A有B没有用A类,A没有B有要强转
        System.out.println(a.sum1());//20
    }
​
}
class A{
    public int i= 10;
    public int sum(){
        return getl()+10;//回到执行类的方法(动态绑定)
    }
    public int sum1(){//属性没有动态绑定,谁有就先用谁
        return i+10;
    }
    public int getl(){
        return i;
    }
}
class B extends A{
    public int i =20;
//    public int sum(){
//        return i+20;
//    }
    public int getl(){
        return i;
    }
//    public int sum1(){
//        return i+10;
//    }
}

package chapter07.D5多态.Detail;
​
public class DynamicBinDing {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.sum());//30 只能调用A类里的成员方法,该方法在B类相同的没有,则用A类,A类没有B类有要强转
        //两者都有用B类,A有B没有用A类,A没有B有要强转
        System.out.println(a.sum1());//20
    }
​
}
class A{
    public int i= 10;
    public int sum(){
        return getl()+10;//回到执行类的方法(动态绑定)
    }
    public int sum1(){//属性没有动态绑定,谁有就先用谁
        return i+10;
    }
    public int getl(){
        return i;
    }
}
class B extends A{
    public int i =20;
//    public int sum(){
//        return i+20;
//    }
    public int getl(){
        return i;
    }
//    public int sum1(){
//        return i+10;
//    }
}

object类

package chapter07.D5多态.objectpoly;
​
public class Animal {
    public void cry(){
        System.out.println("Animal cry()动物在叫唤");
    }
}

package chapter07.D5多态.objectpoly;
​
public class Cat extends Animal{
    @Override
    public void cry() {
        System.out.println("Cat cry() 小猫喵喵叫...");
    }
}

package chapter07.D5多态.objectpoly;
​
public class Dog extends Animal{
    @Override
    public void cry() {
        System.out.println("Dog cry() 小狗汪汪叫...");
    }
}

package chapter07.D5多态.objectpoly;
​
public class PolyObject {
    public static void main(String[] args) {
        //多态的特点
        Animal animal = new Dog();//编译类型animal(表面) 执行类型dog(实际)
        animal.cry();//找运行类型
        animal=new Cat();//从狗指向猫,执行类型换成狗
        animal.cry();
    }
​
}

多态数组

package chapter07.D6多态数组;
​
public class Person {
    private String name;
    private int age;
​
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String say(){
        return name+"\t"+age;
    }
​
    public String getName() {
        return name;
    }
​
    public int getAge() {
        return age;
    }
}

package chapter07.D6多态数组;
​
public class Student extends Person{
    private double score;
​
    public Student(String name, int age, double score) {
        super(name, age);
        this.score = score;
    }
​
    @Override
    public String say() {
        return "学生"+super.say()+"score="+score;
    }
    public void study(){
        System.out.println("学生"+getName()+"正在学习");
    }
}

package chapter07.D6多态数组;
​
public class Teacher extends Person{
    private double salary;
​
    public Teacher(String name, int age, double salary) {
        super(name, age);
        this.salary = salary;
    }
​
​
    @Override
    public String say() {
        return "老师"+super.say()+"salary="+salary;
    }
    public void teach(){
        System.out.println("老师"+getName()+"正在授课");
    }
}

package chapter07.D6多态数组;
​
public class PloyArray {
    public static void main(String[] args) {
        Person[] persons =new Person[5];
        persons [0] = new Person("jack", 20);
        persons [1] = new Student("jack", 21,100);
        persons [2] = new Student("smith", 22,58);
        persons [3] = new Teacher("hhh", 26,800);
        persons [4] = new Teacher("kkk", 27,555);
        for (int i = 0; i < persons.length ; i++) {
            System.out.println(persons[i].say());//动态绑定机制
            //父没有子有要强转
            if (persons[i] instanceof Student){
                ((Student)persons[i]).study();
            }else if (persons[i] instanceof Teacher){
                ((Teacher)persons[i]).teach();
            }

多态参数

package chapter07.D7多态参数;
​
public class Employee {
    public String name;
    private double salary;
​
    public Employee(String name, double salary) {
        this.name = name;
        this.salary = salary;
    }
​
    public double getAnnual(){
        return 12*salary;
    }
​
    public String getName() {
        return name;
    }
​
    public double getSalary() {
        return salary;
    }
}

package chapter07.D7多态参数;
​
public class Manager extends Employee{
    private double bonus;
​
    public Manager(String name, double salary, double bonus) {
        super(name, salary);
        this.bonus = bonus;
    }
​
    public double getBonus() {
        return bonus;
    }
    public void manage(){
        System.out.println("经理"+getName()+"\t"+"is managing");
    }
​
    @Override
    public double getAnnual() {
        return super.getAnnual()+bonus;
    }
}

package chapter07.D7多态参数;
​
public class Worker extends Employee{
    public Worker(String name, double salary) {
        super(name, salary);
    }
    public void work(){
        System.out.println("普通员工"+getName()+"\t"+"is working");
    }
​
    @Override
    public double getAnnual() {//因为普通员工没有其他收入,直接调用父类
        return super.getAnnual();
    }
}

package chapter07.D7多态参数;
​
public class Polyparameter {
    public static void main(String[] args) {
        Worker tom = new Worker("tom", 2500);
        Manager milan = new Manager("milan", 5000,200000);
        Polyparameter polyparameter = new Polyparameter();
        polyparameter.showEmpAnnual(tom);
        polyparameter.showEmpAnnual(milan);
        polyparameter.testWork(tom);
        polyparameter.testWork(milan);
​
    }
    public void showEmpAnnual(Employee e){
        System.out.println(e.getAnnual());
    }
    public void testWork(Employee e){
        if (e instanceof Worker){
            ((Worker) e).work();//父类没有子类有
        }else if (e instanceof Manager){
            ((Manager) e).manage();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值