Java面向对象三大特征

小旋风
• 阅读 1074

面向对象三大特征

  • 封装

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

    • 是实现软件复用的重要手段,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();//编译时报错
          }
      }
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
4年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
4年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
4年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
4年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
4年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
4年前
JAVA面向对象
一、java面向对象的特征?答:java面向对象的特征:封装、继承、多态、抽象。如果问java面向对象的三大特征是什么?那就是封装、继承、多态,但说到面向对象,还有一个很主要的特征就是抽象。1、封装a)铺垫:Java把真实世界中某些具有共同特征的实体抽象成Java中的类,类的实例就是一个对象,而对象和真实世界的实体是一一