java中什么事属性的隐藏

Java 隐藏和覆盖间的区别

在JAVA中所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;也就是子类重写父类的方法,要求方法名和参数类型完全一样(参数不能是子类),返回值和异常比父类小或者相同(即为父类的子类),访问修饰符比父类大或者相同

所谓覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。也就是父类和子类拥有相同名字的属性或者方法时,父类的同名的属性或者方法形式上不见了,实际是还是存在的

两者的区别主要在于:

被隐藏的属性,在子类被强制转换成父类后,访问的是父类中的属性

被覆盖的方法,在子类被强制转换成父类后,调用的还是子类自身的方法

在使用隐藏和覆盖的时候主要注意以下几点:

一、父类的实例变量和类变量能被子类的同名变量隐藏。

二、父类的静态方法被子类的同名静态方法隐藏,父类的实例方法被子类的同名实例方法覆盖。

三、不能用子类的静态方法隐藏父类的实例方法,也不能用子类的实例方法覆盖父类的静态方法,否则编译器会异常。

四、用final关键字修饰的最终方法不能被覆盖。

五、变量只能被隐藏不会被覆盖,子类的实例变量可以隐藏父类的类变量,子类的类变量也可以隐藏父类的实例变量。

java中 什么叫隐藏

技术核心和实例前面已经给出,这里只是给出大家对这种现象的一个定义而已,马克-to-win:子类重新定义一个与父类那里继承来的域变量完全相同的变量,称为域的隐藏。

这里所谓隐藏是指子类拥有了两个相同名字的变量,一个继承自父类,另一个由自己定义。当子类执行父类的方法时,处理的是父类的变量,而当子类执行它自己定义的方法时,所操作的就是它自定义的变量,而把继承自父类的变量“隐藏”起来了。

上面说的是一般的情况,子类方法操作子类的变量。其实,也可以子类的方法通过super操作父类的成员变量。

下面的例子当中,就分新卡和老卡,this获取新卡的余额,super获取老卡的余额。

例1.4.1

class HealthCardM_t_w {

double balance = 90;

double getBalance() {

return this.balance;

}

}

class New_Card extends HealthCardM_t_w {

double balance; // 隐藏父类的balance

public New_Card(int in) {

balance = in;

}

double getOldBalanceInNew_Card() {

return super.balance;

}

double getOldBalanceByMythodInNew_Card() {

return super.getBalance();

}

double getThisBalanceInNew_Cardget() {

return this.balance;

}

}

public class Test {

public static void main(String args[]) {

java中什么事属性的隐藏

JAVA程序中封装与隐藏是什么意思

隐藏就是封装吧。。。。

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际

上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

封装的简单例子:

先来个例子看看;

public class Man

{

//对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性

private String name;

private int age;

private Woman wife;

//对改人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄

public void setWife(Woman wife)

{

this.wife = wife;

}

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public int getAge()

{

return age;

}

public void setAge(int age)

{

this.age = age;

}

}

public class Woman

{

//属性封装

private String name;

private int age;

private Man husband;

//方法封装

public String getName()

{

return name;

}

public void setName(String name)

{

this.name = name;

}

public int getAge()

{

return age;

}

public void setAge(int age)

{

this.age = age;

}

public Man getHusband()

{

return husband;

}

public void setHusband(Man husband)

{

this.husband = husband;

}

}

/**

* 仔细看就会发现,Man类没有提供getWife的方法,这是以为男人不想让自己的妻子被外界访问,

*

* 直接下来呢,就是封装可以吧一个对象的属性私有,而提供一些可以被外界访问的属性的方法,

*

* 比如说,name属性,Man和Woman类都有相应的get和set方法,外界都可以通过这些方法访问和修改

*

* 同时对一些改对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法

*

* 外界是不能带到Man类的wife属性的

*

*/

上面那例子可能没有突出封装的好处,下面来个超简单的表达下:

public class Show

{

public static void show(String str)

{

System.out.println(str);

}

}

上面就是对 System.out.println();的封装。

调用的时候 :

public class Use

{

public static void main(String[] args)

{

Show.show(“封装”);

}

}

这样用的时候就不用使:System.out.println(“封装”);

方法隐藏和方法覆盖的区别和用法

属性的隐藏是指实例变量和方法内部变量相同时,实例变量在该方法内会被隐藏,比如你在方法内直接输出变量,前面不加this,那么只会输出方法内那个变量的值。

方法的覆盖是指子类继承父类时,对父类的方法进行重写,要求返回类型,参数都要与父类一致,当然返回类型可以返回原来返回类型的子类。

一个是对变量而言一个是对方法而言,对于变量,你在方法内可以是任何的类型,和实例变量的类型没有关系。

小弟不才,学java一段时间了,从来没有看到过属性的隐藏会出现在继承中。在继承时,子类中出现与父类相同的属性时,那个属性和父类中的属性没有关系,如果父类中的属性可以被子类继承,子类自然继承了那个属性,出现属性名字相同时,那只是只类的一个自己的属性而已。在子类中用super当然能区别是那个属性,这没有什么奇怪的,继承的一个特点而已。

除了静态变量外,你要访问属性得要有实例对象,你在一个类中同时初始化父类对象和子类对象,他们互不影响,除非你用多态的方式调用,就算用多态调用,使用的属性也只会是父类的属性!调用的方法则是子类重写的方法!

java中 什么是隐藏?什么是重写?二者有何区别?

隐藏是指当父类和子类有相同名字的属性的时候,父类的同名变量形式上不可见了。但是实际还是存在的。

譬如A有int变量a = 10,父类B有变量a = 5;

当B b = new A()得时候,若用b.a 那么父类的5就被隐藏了,此时b.a = 子类的10。在子类里面访问super.a得时候只能得到子类的值

重写是针对方法的,通常是父类的方法在子类中重新写过。当执行子类的实例得时候,实际运行的是子类的方法。在子类里面可以通过super.method()来显式的访问。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月27日 18:39:15
下一篇 2024年3月27日 18:45:30

相关推荐

  • ios推送java,IOS推送服务

    Java服务器端如何接收IOS远程推送传递来的devicetoken 只要可以接受到推送消息就可以获取到deviceToken,那么就需要推送证书打包,并且uexWidget.setPushState(1),还要在应用提示“**想给您发送推送通知”时,点“好”。 iOS开发怎么实现消息推送机制,操作的方法如下:首先应用程序要注册好消息推送。IOS跟服务器设备…

    2024年5月18日
    3000
  • java构造list,java构造领接表

    java中List的用法?尽量详细解释,包括例子。 1、采用循环的方法。通过循环第一个ArrayList,然后通过每循环一次的方式,将值赋值给另一个ArrayList。具体代码实现如下:采用ArrayList自带的addAll()方法。 2、LinkedListLei();这样list就只能add Lei 类型的对象,list.get(int i)获得的也是…

    2024年5月18日
    3200
  • java接口变量finall,JAVA变量

    java中Finally到底起的是什么作用??? 无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。 Finally是一个副词,表示最终或最后。常用于描述某件事物经过长时间或多次努力之后得到实…

    2024年5月18日
    4200
  • java异常继承图,JAVA继承的好处

    请问这两个java类图怎么看,里面的箭头哪个表示继承,哪个表示关联,关联… https:// 如果你需要有偿辅导服务的话,也可以私信我。 泛化/继承(Generalization):实线+三角形空心 相当于类继承,父参与者可以是抽象的,即不能创建一个父参与者的直接实例,这就要求属于抽象父参与者的外部对象一定能够属于其子参与者之一。 在Java中继…

    2024年5月18日
    3800
  • 关于上海5年java的信息

    java工资一般多少 1、以北京为例:北京的Java程序员的月平均工资为一万元左右,应届毕业生的月平均工资为五千元左右,工作年限越长,经验越多,能力越强,职位越高,工资也会越多。 2、初级java工程师:待遇一般在4000以上,8000以下。工作两年以内。中级java工程师:待遇一般是在8000-10000左右,工作5年以内 高级java工程师:待遇1000…

    2024年5月18日
    3500
  • 查看java安装路径linux,查看java安装路径命令

    linux查看java进程命令? 1、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。 pstack:Linux命令。 2、没有“应该显示几个”的规定,运行了几个就是几个。这一大堆内容是一个java进程,可执行文件是/jdk0_144/bin/ja…

    2024年5月18日
    3900
  • java日历框包,用java编写日历添加窗口

    用java做一个日历显示数据功能,在页面上显示日期数据。 主要功能包括显示当月的日历表,当日特殊显示。一定要用JAVA语言写。谢谢了eryaruoshui@12com… 主要功能包括显示当月的日历表 ,当日特殊显示。 一定要用JAVA语言写。 一个就是用了java.awt和javax.swing的,应该是叫JAVA桌面应用程序吧。日历是能做出来,…

    2024年5月18日
    3600
  • java多线程加锁,Java多线程加锁

    求解java多线程的死锁 1、无法访问的Java线程死锁有时候虽然获取对象锁没有问题,线程依然有可能进入阻塞状态。在 Java 编程中IO就是这类问题最好的例子。当线程因为对象内的IO调用而阻塞时,此对象应当仍能被其他线程访问。 2、所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此…

    2024年5月18日
    4500
  • 如何使用java锁机制,java 锁机制

    如何处理java高并发问题 1、高并发最直接的解决方案就是使用多线程,多线程的使用是一门学问一两句道不清建议去实战学习一下,推荐书目:《Java并发编程实战》。此外还要考虑数据库的优化和架构的调优。 2、Java开发高并发的处理方法:最基础的地方做起,优化我们写的代码,减少必要的资源浪费 避免频繁的使用new对象,对于整个应用只需要存在一个实例的类,我们可以…

    2024年5月18日
    4500
  • java打印当前网页内容,java打印html

    java传值到网页中并在网页上打印出来的问题。 1、后台到前台,程序经过tomcat,以及框架容器,以及web.xml。如果在不需要编码的情况下,要统一这些框架,容器,配置文件的编码。好好检查检查。 2、第一种几乎不用编写程序,最简单快捷,这里会遇到几个问题,只能打印表单内容,按钮不希望打印出来;页眉页脚不想打印出来;IE的titile不想打印出来。 3、代…

    2024年5月18日
    3000

发表回复

登录后才能评论



关注微信