Java(day09)多态、异常、抽象类

多态

概念:多态是指的是面向对象的多种形态

多态的前提:继承+重写

父类引用指向子类对象,及创建出来的子类对象的地址值,交给父类类型的引用类型变量来保存

编译看左边,运行看右边

子类重写方法,才能执行多态

package cn.tedu.oop3;
/*多态的入门案例*/
public class TestDemo {
    public static void main(String[] args) {

        Animal a2=new Cat();
        Animal a3=new Dog();
        a2.eat();
        a3.eat();
    }
}
class Animal{
    public void eat(){
        System.out.println("小动物Animal吃啥都行");
    }
}
class Cat extends Animal{
    public void eat(){
        System.out.println("🐱爱吃🐟");

    }
    public void jump(){
        System.out.println("🐱跳的快");
    }
}
class Dog extends Animal{
    public void eat(){
        System.out.println("🐕爱吃🥩");
    }
    public void run(){
        System.out.println("🐕跑的快");
    }
}
执行结果:
🐱爱吃🐟
🐕爱吃🥩

注意:多态主要针对方法,所以多态中,成员变量使用的是父类,方法使用的是子类

package cn.tedu.oop;

import javax.sound.midi.Soundbank;

//本类用于测试多态成员的使用情况
public class TestDemo2 {
    public static void main(String[] args) {
        Animal2 a=new Dog2();
        System.out.println(a.sum);
        a.eat();
    }
}
class Animal2{
    int sum=10;
    public void eat(){
        System.out.println("吃啥都行");
    }
    public static void play(){
        System.out.println("玩啥都行");
    }
}
class Dog2 extends Animal2{
    int sum=20;
    public void eat(){
        System.out.println("狗吃肉包子");
    }
}
运行结果:
10
狗吃肉包子

 异常

Error:目前我们的编码解决不了的问题

Exception:异常

编译异常:未运行代码就报错,强制要求处理

运行异常:运行代码才报错:可以通过编译,不强制要求处理

异常捕获

try{可能会抛出异常的代码}

catch(预先设想的异常名){捕获到了异常,进行处理的解决方案}

package cn.tedu.oop;

import java.util.Scanner;

//异常的入门案例
public class ExceptionDemo {
    public static void main(String[] args) {
        //Method1();//调用暴露异常的方法
        Method2();//调用解决异常的方案1--捕获异常--自己解决
        //Method3();//调用解决异常的方案2--向上抛出--别人解决
    }
    private static void Method3() {

    }
    private static void Method2() {
        try {
            System.out.print("请输入一个值:");
            int a=new Scanner(System.in).nextInt();
            System.out.print("请输入一个值:");
            int b=new Scanner(System.in).nextInt();
            System.out.println((a/b));
        }catch (ArithmeticException e){
            System.out.println("除数不能为0");
        }
    }
    private static void Method1() {
        //10/0  ArithmeticException 算数异常,除数不能为0
        //10/3.4 InputMismatchException 输入不匹配异常
    }
}
运行结果:
请输入一个值:10
请输入一个值:0
除数不能为0

 万能的处理:Exception

package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

//异常的入门案例
public class ExceptionDemo {
    public static void main(String[] args) {
        //Method1();//调用暴露异常的方法
        Method2();//调用解决异常的方案1--捕获异常--自己解决
        //Method3();//调用解决异常的方案2--向上抛出--别人解决
    }
    private static void Method3() {

    }
    private static void Method2() {
        try {
            System.out.print("请输入一个值:");
            int a=new Scanner(System.in).nextInt();
            System.out.print("请输入一个值:");
            int b=new Scanner(System.in).nextInt();
            System.out.println((a/b));
        } catch (Exception e){                        //万能
            System.out.println("你输入的不对");
        }
    }
    private static void Method1() {
        
    }
}
执行结果:
请输入一个值:10
请输入一个值:0
你输入的不对

异常抛出

格式:在方法的小括号和大括号之间,写:throws 异常类型

如果有多个类型,用逗号分开

package cn.tedu.oop;

import java.util.InputMismatchException;
import java.util.Scanner;

//异常的入门案例
public class ExceptionDemo {
    public static void main(String[] args) {
        f();
    }
    private static void f() {
        try {
            Method3();
        }catch (Exception e){
            System.out.println("你的输入有误");
        }
    }
    private static void Method3() throws Exception {
        System.out.print("请输入一个值:");
        int a=new Scanner(System.in).nextInt();
        System.out.print("请输入一个值:");
        int b=new Scanner(System.in).nextInt();
        System.out.println((a/b));
    }
   
}
运行结果:
请输入一个值:20.2
你的输入有误

抽象abstract

1.被abstract修饰的方法是抽象方法,抽象方法没有方法体

2.被abstract修饰的类是抽象类,如果一个类包含了抽象方法,那么他必须是抽象类

3.当一个子类继承了抽象父类以后,有两种解决方案:

方案一:变成抽象子类

方案二:变成普通子类,子类需要实现父类中所有的抽象方法

4.抽象类不可以被创建对象,需要用多态创建对象

抽象类有构造方法,抽象类的构造方法不是为了自己使用,而是为了子类创建对象时使用super();

为什么要有抽象类?

因为不想让外界创建本类对象

package cn.tedu.oop2;

import org.jcp.xml.dsig.internal.dom.DOMUtils;

/*用于抽象类的成员测试*/
public class AbstractDemo3 {
    public static void main(String[] args) {
        Fruit f=new Bananer();
        f.eat();
        f.run();

    }
}
abstract class Fruit{
    int a;
    final int NAME=10;
    public void eat(){
        System.out.println("吃啥都行");
    }
    public abstract void run();
    
}
class Bananer extends Fruit{
    public void run(){
        System.out.println("香蕉很甜");
    }
}
运行结果:
吃啥都行
香蕉很甜

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值