广告
返回顶部
首页 > 资讯 > 精选 >怎么理解Java面向对象三大特性
  • 621
分享到

怎么理解Java面向对象三大特性

2023-06-02 18:06:30 621人浏览 八月长安
摘要

这篇文章主要讲解了“怎么理解Java面向对象三大特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java面向对象三大特性”吧!继承Java中的继承只能单继承,但是可以通过内部类继承

这篇文章主要讲解了“怎么理解Java面向对象三大特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java面向对象三大特性”吧!

继承

Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。

public class Son extends Father{public void Go () {System.out.println("son go");}public void eat () {System.out.println("son eat");}public void sleep() {System.out.println("zzzzzz");}public void cook() {//匿名内部类实现的多继承new Mother().cook();//内部类继承第二个父类来实现多继承Mom mom = new Mom();mom.cook();}private class Mom extends Mother {@Overridepublic void cook() {System.out.println("mom cook");}}}

封装

封装主要是因为Java有访问权限的控制。public > protected > package = default > private。封装可以保护类中的信息,只提供想要被外界访问的信息。

类的访问范围

A、public包内、包外,所有类中可见B、protected包内所有类可见,包外有继承关系的子类可见(子类对象可调用)C、(default)表示默认,不仅本类访问,而且是同包可。D、private仅在同一类中可见

多态

多态一般可以分为两种,一个是重写overwrite,一个是重载override。

重写是由于继承关系中的子类有一个和父类同名同参数的方法,会覆盖掉父类的方法。重载是因为一个同名方法可以传入多个参数组合。注意,同名方法如果参数相同,即使返回值不同也是不能同时存在的,编译会出错。从JVM实现的角度来看,重写又叫运行时多态,编译时看不出子类调用的是哪个方法,但是运行时操作数栈会先根据子类的引用去子类的类信息中查找方法,找不到的话再到父类的类信息中查找方法。
 而重载则是编译时多态,因为编译期就可以确定传入的参数组合,决定调用的具体方法是哪一个了。

向上转型和向下转型的解释 :

public static void main(String[] args) {        Son son = new Son();        //首先先明确一点,转型指的是左侧引用的改变。        //father引用类型是Father,指向Son实例,就是向上转型,既可以使用子类的方法,也可以使用父类的方法。        //向上转型,此时运行father的方法        Father father = son;        father.smoke();        //不能使用子类独有的方法。        // father.play();编译会报错        father.drive();        //Son类型的引用指向Father的实例,所以是向下转型,不能使用子类非重写的方法,可以使用父类的方法。        //向下转型,此时运行了son的方法        Son son1 = (Son) father;        //转型后就是一个正常的Son实例        son1.play();        son1.drive();        son1.smoke();        ```        //因为向下转型之前必须先经历向上转型。        //        在向下转型过程中,分为两种情况:        //        //        情况一:如果父类引用的对象如果引用的是指向的子类对象,        //        那么在向下转型的过程中是安全的。也就是编译是不会出错误的。            //因为运行期Son实例确实有这些方法            Father f1 = new Son();            Son s1 = (Son) f1;            s1.smoke();            s1.drive();            s1.play();        //        情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,        //        但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。        //因为运行期Father实例并没有这些方法。            Father f2 = new Father();            Son s2 = (Son) f2;            s2.drive();            s2.smoke();            s2.play();        //向下转型和向上转型的应用,有些人觉得这个操作没意义,其实可以用于方法参数中的类型聚合,然后具体操作再进行分解。        //比如add方法用List引用类型作为参数传入,传入具体类时经历了向下转型        add(new LinkedList());        add(new ArrayList());        //总结        //向上转型和向下转型都是针对引用的转型,是编译期进行的转型,根据引用类型来判断使用哪个方法        //并且在传入方法时会自动进行转型(有需要的话)。运行期将引用指向实例,如果是不安全的转型则会报错。        //若安全则继续执行方法。    }    public static void add(List list) {        System.out.println(list);        //在操作具体集合时又经历了向上转型//        ArrayList arr = (ArrayList) list;//        LinkedList link = (LinkedList) list;    }

总结:
向上转型和向下转型都是针对引用的转型,是编译期进行的转型,根据引用类型来判断使用哪个方法。并且在传入方法时会自动进行转型(有需要的话)。运行期将引用指向实例,如果是不安全的转型则会报错,若安全则继续执行方法。

编译期的静态分派:其实就是根据引用类型来调用对应方法。

public static void main(String[] args) {    Father father  = new Son();    静态分派 a= new 静态分派();    //编译期确定引用类型为Father。    //所以调用的是第一个方法。    a.play(father);    //向下转型后,引用类型为Son,此时调用第二个方法。    //所以,编译期只确定了引用,运行期再进行实例化。    a.play((Son)father);    //当没有Son引用类型的方法时,会自动向上转型调用第一个方法。    a.smoke(father);    //    }public void smoke(Father father) {    System.out.println("father smoke");}public void play (Father father) {    System.out.println("father");    //father.drive();}public void play (Son son) {    System.out.println("son");    //son.drive();}

方法重载优先级匹配

public static void main(String[] args) {        方法重载优先级匹配 a = new 方法重载优先级匹配();        //普通的重载一般就是同名方法不同参数。        //这里我们来讨论当同名方法只有一个参数时的情况。        //此时会调用char参数的方法。        //当没有char参数的方法。会调用int类型的方法,如果没有int就调用long        //即存在一个调用顺序char -> int -> long ->double -> ..。        //当没有基本类型对应的方法时,先自动装箱,调用包装类方法。        //如果没有包装类方法,则调用包装类实现的接口的方法。        //最后再调用持有多个参数的char...方法。        a.eat('a');        a.eat('a','c','b');    }    public void eat(short i) {        System.out.println("short");    }    public void eat(int i) {        System.out.println("int");    }    public void eat(double i) {        System.out.println("double");    }    public void eat(long i) {        System.out.println("long");    }    public void eat(Character c) {        System.out.println("Character");    }    public void eat(Comparable c) {        System.out.println("Comparable");    }    public void eat(char ... c) {        System.out.println(Arrays.toString(c));        System.out.println("...");    }//    public void eat(char i) {//        System.out.println("char");//    }

感谢各位的阅读,以上就是“怎么理解Java面向对象三大特性”的内容了,经过本文的学习后,相信大家对怎么理解Java面向对象三大特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么理解Java面向对象三大特性

本文链接: https://www.lsjlt.com/news/230898.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么理解Java面向对象三大特性
    这篇文章主要讲解了“怎么理解Java面向对象三大特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java面向对象三大特性”吧!继承Java中的继承只能单继承,但是可以通过内部类继承...
    99+
    2023-06-02
  • Java面向对象的三大特性
    本篇内容主要讲解“Java面向对象的三大特性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java面向对象的三大特性”吧!Java面向对象三大特性面向对象简称 OO(Object Oriente...
    99+
    2023-06-02
  • python面向对象的三大特性
    一、 封装 广义的封装 :类中的成员 狭义的封装 :私有成员 表象:__名字 实际:_类名__名字 要求:只能在类的内部使用,既不能在类的外部调用,也不能在子类中使用 对象的作用:存储一些值,以后方便自己使用 class F...
    99+
    2023-01-31
    三大 面向对象 特性
  • 面向对象以及三大特性
      1.函数式编程和面向对象的对比     题目:开发一个消息提醒的功能(邮件/短信/微信) def email(em,text): """ 发送邮件 :return: """ print(...
    99+
    2023-01-30
    三大 面向对象 特性
  • Python面向对象三大特性是什么
    今天小编给大家分享一下Python面向对象三大特性是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问:说说Python面...
    99+
    2023-06-19
  • python 面向对象三大特征详解
    目录一、面向对象三大特征介绍1、封装(隐藏)2、继承3、多态二、继承1、语法格式2、类成员的继承和重写3、super()获得父类定义4、设计模式_工厂模式实现5、设计模式_单例模式实...
    99+
    2022-11-12
  • Python面向对象的三大特性是什么
    这篇“Python面向对象的三大特性是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python面向对象的三大特性是什么...
    99+
    2023-07-02
  • Java面向对象有三大特征是什么
    这篇文章主要讲解了“Java面向对象有三大特征是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java面向对象有三大特征是什么”吧!面向对象有三大特征:封装性、继承性、多态性。l&nbs...
    99+
    2023-06-02
  • Java面向对象编程的三大特征
    目录1.封装1.1.封装概念1.2.封装的好处1.3.封装的实现步骤2.继承2.1.继承概念2.2.继承的好处2.3.子类对象实例化过程3.多态3.1.多态基本介绍3.2.多态的具体...
    99+
    2022-11-13
  • python面向对象编程及三大特性是什么
    今天小编给大家分享一下python面向对象编程及三大特性是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。面向过程编程:“...
    99+
    2023-06-27
  • python面向对象三大特征是什么
    小编给大家分享一下python面向对象三大特征是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、面向对象三大特征介绍Python 是面向对象的语言,也支持面向对象编程的三大特性:继承、封装(隐藏)、多态。1、封装(隐...
    99+
    2023-06-25
  • JAVA面对对象三大特征是什么
    本篇内容介绍了“JAVA面对对象三大特征是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目录面对对象的三大特征: 封装、继承、多态封装继...
    99+
    2023-06-20
  • php中面向对象的三大特性分别是什么
    这篇“php中面向对象的三大特性分别是什么”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“php中面向对象的三大特性分别是什么”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接...
    99+
    2023-06-06
  • Python 面向对象编程的三大特性之继承
    目录Python  面向对象编程的三大特性之继承一、继承1、继承的实际栗子2、继承的好处3、继承的使用场景4、继承有几种?5、Python 中继承的简单语法二、不使用继承、...
    99+
    2022-11-12
  • python3--面向对象的三大特性:封装,property,classmethod,staticmethod
    python中的封装隐藏对象的属性和实现细节,仅对外提供公共访问方式好处:1 将变化隔离2 便于使用3 提供复用性4 提高安全性封装原则1 将不需要对外提供的内容都隐藏起来2 把属性都隐藏,提供公共方法对其访问私有变量和私有方法在pytho...
    99+
    2023-01-30
    三大 面向对象 特性
  • java面向对象特性介绍
    Java面向对象的三大特性:封装、继承、多态。一、封装将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作与访问。封装的实现步骤:修改属性的可见性:设为private创建getter/setter方法...
    99+
    2018-11-22
    java入门 java 面向对象 特性
  • Python面向对象的三大特性封装、继承、多态
    Python是一门面向对象的语言。面向对象都有三大特性:封装、继承、多态。 下面分别来说说这三大特性: 1、封装 隐藏对象的属性和实现细节,仅对外提供公共访问方式。在python中用...
    99+
    2022-11-11
  • Java中的面向对象特性是什么
    Java中的面向对象特性是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。对象与类:Date t=new Date(); 有2部分,new Date()构造了一个Date类型...
    99+
    2023-06-17
  • 怎么理解Java面向对象概念
    这篇文章主要讲解了“怎么理解Java面向对象概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java面向对象概念”吧!Java作为构建编程语言的核心基础,已经得到了越来越多人的青睐...
    99+
    2023-06-02
  • Python面向对象三大特征 封装、继承、多态
    目录1、封装1.1 私有属性和私有方法2、继承2.1 方法的重写2.2 在子类方法中调用父类方法2.3 多继承2.4 新式类和经典类 3、多态1、封装 封装: 根据 职责 将 属性 ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作