Java面向对象三大特征

面向对象三大特征
  • 封装

    • 对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过类所提供的方法来实现对内部信息的操作和访问。
  • 继承

    • 是实现软件复用的重要手段,Java的继承具有单继承特点,每个子类只有一个直接父类,使用extends来实现。
    • 实现继承的类被称为:子类,被继承的类被称为:父类或者基类或者超类。
    • 父类与子类的关系是一种一般和特殊的关系。即,父类(一般),子类(特殊)。比如:水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果。
      public class SubClass extends SuperClass{
          //类定义部分
      }
    
  • 多态

    • Java引用变量有两个类型,一个是编译时类型,一个是运行时类型。

    • 编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。

    • 如果编译时类型与运行时类型不一致,就可能出现所谓的多态。

      public class SubClass extends BaseClass {
          public String a = "hello world";
      
          public void test() {
              System.out.println("我是子类,覆盖父类的方法test");
          }
      
          public void sub() {
              System.out.println("我是子类sub方法");
          }
      }
      
      class BaseClass {
          public int a = 1;
      
          public void base() {
              System.out.println("我是父类base方法");
          }
      
          public void test() {
              System.out.println("我是父类,将要被子类覆盖的方法test");
          }
      
          public static void main(String[] args) {
              //编译时类型与运行时类型一致,不存在多态
              BaseClass baseClass = new BaseClass();
              System.out.println(baseClass.a);//1
              baseClass.base();//我是父类base方法
              baseClass.test();//我是父类,将要被子类覆盖的方法test
      
              //编译时类型与运行时类型一致,不存在多态
              SubClass subClass = new SubClass();
              System.out.println(subClass.a);//hello world
              //子类中没有此方法,但在父类中有,则调用的是继承到的父类的方法
              subClass.base();//我是父类base方法
              //子类中有此方法,则调用的是子类中的方法
              subClass.test();//我是子类,覆盖父类的方法test
      
              //编译时类型与运行时类型不一致,发生多态
              BaseClass baseSub = new SubClass();
              //与方法不同,对象的filed属性,不具备多态,调用的是父类的属性
              System.out.println(baseSub.a);//1
              //运行后,运行时类型是子类。子类中没有此方法,父类有,调用的是继承的父类的方法
              baseSub.base();//我是父类base方法
              //运行后,运行时类型是子类。子类中有此方法,调用的是子类的方法
              baseSub.test();//我是子类,覆盖父类的方法test
      
              //baseSub定义的时候是BaseClass类型,编译的时候,会去找父类BaseClass中的方法,发现没有找到,编译会报错
              //baseSub.sub();//编译时报错
          }
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值