Java---OOP之多态

1 多态的成员使用

1.1 特点:

  • 成员变量:使用的是父类的
  • 成员方法:由于存在重写现象所以使用的是子类的
  • 静态成员:随着对象而存在,谁调用的就返回谁的
public class Test1_UseManyTai {
    public static void main(String[] args) {
       // 创建多态对象测试
       Fu f = new Zi();// 口诀1 :父类引用 指向 子类对象
       System.out.println(f.count); //1、成员变量用父类的!!!口诀2: 编译看左边,运行看右边(针对重写现象)。 
	       f.eat(); // 口诀2: 编译看左边,运行看右边(针对重写现象)。
		    //2、 编译看左边,eat()调用的是父类的方法声明,但是方法体使用的是子类的。
	       // 编译看左边更好的体现了多态可以用来 统一调用标准,就是都向 父类 看齐,必须使用父类提供了的功能。       
	       //3、静态方法能重写吗???---静态资源不能重写
	       f.sleep();//使用的仍然是父类的功能  
    }
}

// 创建父类
class Fu {
    int count = 10;
    public void eat() {
	       System.out.println("Fu..eat()...");
    }
	// 静态方法
    static public void sleep() {
	       System.out.println("Fu..sleep()...");
    }
}

// 创建子类
class Zi extends Fu {
	    int count = 20;
	    public void eat() {
	       System.out.println("Zi..eat()...");
    }
    // 静态方法  --  真的是重写现象吗---不存在!!
	    static public void sleep() {
	       System.out.println("Zi..sleep()...");
    }
}

2 权限修饰符

  • 用来控制一个类,或者类中的成员的访问范围。
    在这里插入图片描述

3 异常

3.1 概述:

  • 用来封装错误信息的对象。
  • 组成结构:类型,提示,行号。

3.2 异常的继承结构:

  • Throwable - 顶级父类
  • – Error:系统错误,无法修复
  • – Exception:可修复的错误
  • –RunTimeException
  • –ClassCastException
  • –ClassNotFoundException

3.3 异常处理:

  • 程序中遇到了异常,通常有两种处理方式:捕获 或者 向上抛出
  • 当调用了一个抛出异常的方法时,调用位置可以不做处理继续向上抛出也可以捕获异常。

4 抽象类

4.1 概念:

  • Java中可以定义没有方法体的方法,该方法由其子类来具体的实现。
  • 该没有方法体的方法我们称之为抽象方法,含有抽象方法的类我们称之为抽象类。
  • 抽象类可以理解为是一个只有方法声明没有方法体的特殊类。
//把共性的代码,向上提取,形成父类  -- 形成继承的结构好处是可以复用父类的代码
//抽象类是个特殊的类,特殊在哪儿?特殊在类里可以有普通方法,还可以有抽象方法。
抽象的 class Animal{
    //父类的方法体让子类重写了!!!--这时父类的方法体有点多余!!!父类干脆就不提供方法体--抽象方法
    抽象的 public void eat() ;
    public void sleep(){
       syso(....);
    }
}

class Dog extends Animal{
    public void eat(){//重写目的是修改父类原有的功能
       syso(.);
   }
}

4.2 特点:

  • 通过java关键字abstract实现
  • 可以修饰方法或者类
  • 抽象类中可以没有抽象方法(由子类去实现) ?
  • 如果类中有抽象方法,那该类必须定义为一个抽象类
  • 子类继承了抽象类以后,要么还是一个抽象类,要么就把所有抽象方法都重写
  • 多用于多态中
  • 抽象类不可以被实例化new

5 抽象类的用法

public class Test4_UseAbstract {
    public static void main(String[] args) {
       //创建多态对象测试
       Father f = new Son();
	   //Father f2 = new Father();
    }
}

//创建父类
abstract class Father{
    //1、抽象类能创建对象吗?--不能  !!
    //2、那么抽象类里的构造方法有啥用??---方便子类创建对象!!
    public Father() {
	       System.out.println("Father()...");
    }
}

//创建子类
class Son extends Father{
    public Son() {
       super();//默认就存在
              System.out.println("Son()...");
    }
}
发布了36 篇原创文章 · 获赞 13 · 访问量 1074

猜你喜欢

转载自blog.csdn.net/weixin_44598691/article/details/104756862