怎么理解Java面向对象三大特性
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,这篇文章主要讲解了"怎么理解Java面向对象三大特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么理解Java面向对象三大特性"吧!继承Java中
千家信息网最后更新 2025年02月16日怎么理解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面向对象三大特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
方法
类型
编译
参数
子类
对象
实例
安全
就是
情况
指向
行期
运行
三大
特性
多态
优先级
过程
错误
静态
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库供货商排名
网络安全工程师 工作内容
SQLserver数据库基础
两会十二个网络安全热点
关于网络安全问题硬笔书法
解消点工具软件开发
撤销数据库中的表
网络安全获奖logo图片
计算机网络技术职业目标与选择
简述网络安全威胁的定义
江苏北斗时间服务器设置云主机
数据库别名可以分组么
电子网络安全防范的要点
海康nvr服务器类型
文明上网网络安全手抄报小学生
兴义服务器安装
郑州网络安全竞赛
苹果11激活过程连接不了服务器
安全接入服务器怎么上传发票
家庭教育与网络安全直播江西
中医药临床案例成果数据库
百度云搭建ftp服务器
2022正式服联盟玩哪个服务器
福建省信息网络安全知识
服务器hd卡
网页服务器的数据库
天天英雄服务器失败
吉林大数据时间同步服务器
网络技术设置用户的登录时间
庆阳市数据库