java进阶笔记Day(二)

多态
多态指的是同一个对象具有多种表现形态
多态有下面的几个前提
1.要有继承/实现关系
2.要有方法复写
3.父类/接口接收子类对象
Animal a=new Dog();
public class Animal{
public void eat(){
System.out.println(“动物吃东西”);
}
}

public class Dog extends Animal{
@Override
public void eat(){
System.out.println(“狗吃骨头”);
}
}

public class Demo1{
public static void main(String[] args){
Animal a=new Dog();
a.eat(); //执行Dog类中复写的方法
}
}
多态的成员访问特点

在多态的情况下,只有存在方法复写才执行子类复写的方法,否则不管是方法还是变量就看父类,如果没有没有就报错。
多态的好处和弊端
多态的好处
在写一个方法的时候,可以把方法的参数写成父类的类型,那么调用方法时就可以传递任何的子类对象。

public class Animal {
public void eat(){
System.out.println(“动物吃东西”);
}
}
public class Dog extends Animal {
@Override
public void eat(){
System.out.println(“狗吃骨头”);
}
}
public class Cat extends Animal {
@Override
public void eat(){
System.out.println(“猫吃小鱼”);
}
}

public class Person {
//养动物
//参数是Animal类型,既能接收Dog对象,也能接收Cat对象
public void feed(Animal a){
a.eat();
}
}
public class Demo3 {
public static void main(String[] args) {
Person p=new Person();
//让Person对象养猫
Animal c=new Cat();
p.feed©;

//让Person对象养猫
Animal d=new Dog();
p.feed(d);
}
}
多态的弊端

//不能调用子类特有的方法
Animal c=new Cat();
c.eat(); //eat方法是子父类都有的,可以调用
c.catchMouse(); //catchMouse是子类特有方法,不能用多态的方式调用。
多态的转型

  • 向上转型
    Animal a=new Dog(); //多态的写法就是向上转型
  • 向下转型
    //使用多态的写法不能调用子类特有方法,如果想调用子类特有方法就必须向下转型
    if(a instanceof Dog){
    Dog d=(Dog)a;
    d.lookHome();
    }
    抽象
    abstract表示抽象的意思,可以用来修饰类和方法,具备以下的特点

1.抽象类不能被实例化(不能创建对象)
2.抽象类中可以写抽象方法,也可以写非抽象方法
3.一个具体子类继承抽象类,必须重写所有的抽象方法
4.一个抽象类继承抽象类,可以不复写抽象方法

//动物类
public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
//狗类 继承 动物类
public class Dog extends Animal {
@Override
public void eat() {
System.out.println(“狗吃骨头”);
}
@Override
public void sleep() {
System.out.println(“狗睡觉”);
}
}
//测试类
public class Demo5 {
public static void main(String[] args) {
Animal d=new Dog();
d.eat();
d.sleep();
}
}
人饲养动物案例【重点】
动物类

public abstract class Animal {
public abstract void eat();
public abstract void sleep();
}
猫类

public class Cat extends Animal {
@Override
public void eat() {
System.out.println(“猫吃鱼”);
}

@Override
public void sleep() {
System.out.println(“猫在狗窝里睡”);
}

//特有方法的方法
public void catchMouse(){
System.out.println(“猫抓老鼠”);
}
}
狗类

public class Dog extends Animal {
@Override
public void eat() {
System.out.println(“狗吃骨头”);
}

@Override
public void sleep() {
System.out.println(“狗趴着睡觉”);
}

//特有方法的方法
public void swimming(){
System.out.println(“狗刨式游泳”);
}
}
人类

public class Person {
//养动物
public void feed(Animal a){
a.eat();
a.sleep();

//判断Animal a是否为Dog类型
if(a instanceof Dog){
//把Animal a转换为Dog,再调用swimming方法
((Dog) a).swimming();
}

//判断Animal a是否为Cat类型
if(a instanceof Cat){
//把Animal a转换为Cat,再调用catchMouse方法
((Cat) a).catchMouse();
}
}
}
测试类

public class Demo6 {
public static void main(String[] args) {
Person p=new Person();

Animal d=new Dog();
p.feed(d);

System.out.println("-------");

Animal c=new Cat();
p.feed©;
}
}
接口
接口可以理解为一套公共的标准规范(通过抽象方法来体现的)
接口的定义和实现

public interface 接口名{
//定义抽象方法
}
public class 类名 implements 接口名{
//复写接口中所有的抽象方法
}

//定义Usb接口(Usb接口的规范)
public interface Usb{
//加载驱动
public void loadDriver();
//运行
public void run();
}

//定义UsbMouse类 实现 Usb接口
public class UseMouse implements Usb{
//加载驱动
public void loadDriver(){
System.out.println(“加载鼠标的驱动程序”);
}
//运行
public void run(){
System.out.println(“鼠标正常运行”);
}
}

//测试类
public class Demo6{
public static void main(string[] args){
UseMouse um=new UseMouse();
um.loadDriver();
um.run();
}
}
电脑使用Usb接口的案例【重点】
定义Usb接口

public interface Usb {
//加载驱动
public abstract void loadDriver();
//运行
public abstract void run();
}
Usb的鼠标

public class UsbMouse implements Usb {
@Override
public void loadDriver() {
System.out.println(“加载鼠标的驱动程序”);
}

@Override
public void run() {
System.out.println(“鼠标运行”);
}
}
Usb的键盘

public class UsbKeyBoard implements Usb {
@Override
public void loadDriver() {
System.out.println(“加载键盘的驱动程序”);
}

@Override
public void run() {
System.out.println(“键盘运行”);
}
}
电脑类

public class Computer {
//扩展功能
public void other(Usb u){
u.loadDriver();
u.run();
}
}
测试类

public class Demo7 {
public static void main(String[] args) {
//创建电脑对象
Computer com=new Computer();
//让电脑使用鼠标
UsbMouse um=new UsbMouse();
com.other(um);

System.out.println("---------");
//让电脑使用键盘
UsbKeyBoard ub=new UsbKeyBoard();
com.other(ub);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值