重写与重载、多态、Instanceof、接口

1、重写与重载的区别

方法重写 方法重载
同一个类 子类重写父类的方法
方法名相同 方法名相同
参数列表不同 参数列表相同
与返回值和修饰符无关 返回值相同或是其子类,修饰符不能比父类更严格

2、多态

2.1多态的概念

什么是多态:多种形态。

分两部分:

1、功能多态:一个行为多种实现方式 体现:重写和重载

2、形态多态:一个类型的多种表现形式比如:动物多种表现形式:猫、狗

Animal a=new Dog();//父类的引用指向子类的对象(即向上转型),反过来不行

多态的2种实现方式:

1.将父类的类型作为方法的形参 在调用方法时给他传递具体的子类对象

2.将父类作为方法的返回值类型来实现多态(计算器(工厂模式))

2.2多态的应用

1、向上转型:父类引用指向子类对象

2、向下转型:父类引用显式类型转换为子类对象。
创建人类作为父类 婴儿,小学生,高中生,成年人作为子类
使用多态来描述睡觉的方法

public abstract class People {
 	public abstract void  sleeping() ;
}

public class Baby extends People {
 	@Override
 	public void sleeping() {
 	System.out.println("抱着唱着世上只有妈妈好睡觉...");
 	}
}

public class Pupil extends People {
 	@Override
 	public void sleeping() {
 	System.out.println("吱吱吱,睡觉的时候在磨牙....");
 	}
}

public class Test {
 public static void main(String[] args) {
 	People babay=new Baby();
 	babay.sleeping();
 	People pupil=new Pupil();
 	pupil.sleeping();
 }
}

2.3 父类作为返回值

/**

 * 买宠物

 * @param choose

 * @return

 */

public Animal buy(int choose){

    Animal animal=null;

    switch (choose) {

    case 1:

        animal=new Dog();

        break;

    case 2:

        animal=new Cat();

        break;

    case 3:

        animal=new Pig();

        break;

    default:           

        break;

    }

    return animal;

}

2.4 父类作为参数传递

/**

 * 玩耍

 */

public void play(Animal a){//向下转型,一般与instanceOf结合使用,调用子类特有的属性和行为

    /*if(a==null){

        return;

    }*/

    if(a instanceof Dog){

        ((Dog)a).eat();

    }else if(a instanceof Cat){

        ((Cat)a).sleep();

    }else if(a instanceof Pig){

        ((Pig)a).run();

    }

}

2.5 Instanceof运算符的应用

作用:用来判断对象的类型。


Public class Demo{

Public static void main(String[] args){

//不能用子类引用指向父类对象

        //编译期错误

        //运行期错误

        //向下转型

        Cat c=(Cat)c1;

        //先判断一下要转换的类型是否是目标类型,如果是,再强制类型转换

        if(d1 instanceof Cat){//instanceof用来判断对象类型,返回值true表示类型一致,false表示类型不一致

            Cat c2=(Cat)d1;

        }

}

}

3、接口

3.1 接口的概述

接口:接口就是一组功能(能力/规范)

特点:

1、实现多态

2、解决了继承的单一继承的问题。

注意事项

1、多组合,帮助程序功能与功能之间解耦,程序的扩展性好、维护性好

2、接口侧重能力,忽略实现细节

3、面向接口编程,一个接口可以同时继承多个接口

接口实现了多继承性

当一个类需要继承多个父类的时候
XX是XX 就用继承 XX具备XX的某种功能就用接口
如果一个类只有一个父类 优先使用接口()

接口 里面的方法全是抽象方法 方法的修饰符默认都是public

里面的变量都是静态常量(不需要加修饰符)

一个类是定义成接口还是抽象类呢?

如果一个类中的方法全是抽象方法  变量都是静态常量  定义为接口

猜你喜欢

转载自blog.csdn.net/weixin_43951534/article/details/88728208