博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java之类的封装,继承,多态
阅读量:6859 次
发布时间:2019-06-26

本文共 2019 字,大约阅读时间需要 6 分钟。

hot3.png

Java之类的封装,继承,多态

    类的封装

        将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实

        现对内部信息的操作和访问。封装是通过设置访问控制符实现的,他们的访问控制如下:

private default portected public 
同一个类中
同一个包中
子类中
全局范围内

    封装的目的

            1.隐藏类的实现细节

            2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对Field的不合

               理访问。

            3.可进行数据检查,从而有利于保证对象信息的完整性。

            4.便于修改,提高代码的可维护性。

    封装的设计基本原则

            1.类里的绝大部分Field都应该使用private修饰,只有一些static修饰的,类似全局变量的Field才考虑使用

               public修饰。除此之外,有些函数只是用于铺助实现该类的其他函数,这些函数被称为工具方法,也应

               该使用private修饰。

            2.如果某个类主要用作其他类的父类,该类里包含的大部分方法可能仅希望被其子类重写,而不想被外界

               直接调用,则应该使用protected修饰这些方法。

            3.希望暴露出来给其他类自由调用的方法应该使用public修饰。因此,类的构造器通过使用public修饰,从

               而允许在其他地方创建该类的实例。因此外部类通常都希望被其他类自由使用,所以大部分外部类都使

               用public修饰 

    例子

public class Fruit{    private String name;    private float  weight;    private float  price;        public Fruit(String name,float weight){        setName(name);        setWeight(weight);    }        private void setName(String name){        this.name = name;    }        public void setWeight(float weight){        this.weight = weight;    }         public void setPrice(float price){        this.price = price;    }        public float getName(){        return name;    }        public float getWeight(){        return weight;    }        public float getPrice(){        return price;    }}

    类的继承

        Java类中只有一个直接父类,没有多继承

    类方法重写

        子类包含与父类同名函数的现象被称为函数重写,也称覆盖。

    Super限定

        super限定用来在子类函数中调用父类被覆盖的实例函数。

    子类构造器调用父类构造器的几个情况

        1.子类构造器执行体的第一行使用super显式调用父类构造器,系统将根据super调用传入的实参列表调用父类

           构造器

        2.子类构造器执行体的第一行代码使用this显式调用本类中重载的构造器,系统将根据this调用里传入的实参列表

           调用本类中的另一个构造器。执行本类中另一个构造器时即会调用父类构造器。

        3.子类构造器执行体中既没有this,也没有super,系统将会执行子类构造器之前,隐式调用父类无参数的构造

           器。

    例子

public class Apple extends Fruit{    public Apple (String name,float weight){        super(name,weight);    }}


    类的多态

        相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,称之为多态。

        引用变量的两个类型

            编译时类型:由声明该变量时使用的类型决定。

            运行时类型:由实际赋给该变量的对象决定。

        多态的产生

            当编译时类型和运行时类型不一致时,则产生了多态。

public class Test {    public static void main(String[] args){          Fruit fruit = new Apple();    // 多态产生    }}

        从设计上看面向对象的三大特性

            1.继承是为了对物的信息进行抽象

            2.多态是为了对物的行为进行抽象

            3.封装是为了对物与外界交流进行抽象

转载于:https://my.oschina.net/Ccx371161810/blog/265013

你可能感兴趣的文章
Hadoop学习第四天之hadoop命令操作(上)
查看>>
走进阿里云:做云数据、大计算的No.1
查看>>
Gradle 基础
查看>>
listview优化(中)
查看>>
当安全遇上AI 阿里聚安全算法挑战赛完美收官
查看>>
怪”博士闵万里:用人工智能,解决吃饭出行问题
查看>>
ES6 + Webpack + React + Babel 如何在低版本浏览器上愉快的玩耍(下)
查看>>
日志服务(原SLS)新功能发布(8)--日志服务Web Tracking功能
查看>>
kvm虚拟化学习笔记(十三)之kvm虚拟机磁盘文件读取小结
查看>>
kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
查看>>
SlideView 图片滑动(扩展/收缩)展示效果
查看>>
iOS开发之即时通讯之Socket(AsyncSocket)
查看>>
算法设计
查看>>
unsupported major.minor version 解决方法
查看>>
ExtJS之Ext.getDom
查看>>
数据产品设计专题(5)- 分布式数据仓库技术架构
查看>>
为什么选用 React 创建混合型移动应用?
查看>>
自己收集的关于企业数据安全,等级,备份恢复的方案等文档
查看>>
“System.Collections.Generic.IEnumerable<TestDAL.HistoryData>”不包含“ToList”的定义
查看>>
pg 函数sfa_tmp_sleep()执行越来越慢-sql分析
查看>>