「java隐藏对象」Java隐藏对象

博主:adminadmin 2022-12-20 09:39:06 74

本篇文章给大家谈谈java隐藏对象,以及Java隐藏对象对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA多态中的隐藏和覆盖

Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型

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

运行时类型:由该变量指向的对象类型决定

如果编译时类型和运行时类型不一致,会出现所谓的多态。因为子类其实是一种特殊的父类,因此java允许把一个子类对象直接赋值给一个父类引用变量,无须任何类型转换,或者被称为向上转型,由系统自动完成。

如 Father f = new Son(); Son是Father的子类

引用变量f就会出现编译时类型和运行时类型不一致的情况 编译时是Father类型的 运行时是Son类型的

当变量的编译时类型和运行时类型不一致时,通过变量访问它所引用的对象的实例时,该实例变量的值由声明该变量的类型决定。

通过变量访问它所引用的对象的方法时,该方法的行为由所引用的对象实际类型所决定。

JAVA类的封装是什么意思?

JAVA类的封装就是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

主要好处是:

将变化隔离。

便于使用

提高重要性。

提高安全性。

封装步骤:

1.首先建立一个类,类名取为Person,其中Private的意思是私有的,只可访问当前类。

2.建立正确的程序,就可以通过Dos命令去审查和编译了。当编译通过即可输出程序中的资料和答案。

3.以上就是一个关于封装的例子,注意其中intgetAge-是为了获取私有成员变量。

有关java中覆盖和隐藏的问题

所谓父类静态方法在子类重新定义会被隐藏,指的实际上应该是静态方法,在子类中既不能被重写,也不能被重载。

所谓静态方法被隐藏应该类似于重写的作用,因为重写也是类似于隐藏了父类的那个方法。

实际上静态方法一般不存在被隐藏的问题,因为如果两个类有继承关系,并且两个类都有各自的一个静态方法(名称相同,参数,返回都相同),那么如果这时候从外部调用这两个类的静态方法,因为需要加上类名,所以不会重复,比如

class A{static void meth1(){}} class B extends A{static void meth1(){}}

class C

{

public static void main(String[] args)

{

A.meth1();

B.meth1();//从外部调用静态方法不存在隐藏。

}

}

如果从内部调用,那么就存在隐藏了,实际上就是和重写差不多吧。

class A{static void meth1(){}}

class B extends A

{

static void meth1(){}

public static void main(String[] args)

{

meth1(); //这里调用的是哪一个呢? 调用的是自身的,父类的被隐藏了。

}

}

下面来说下重写和重载

所谓重写和重载的最大的区别是:方法参数是否能改变。

例如重写:

class A

{

void Meth1(int i){}

}

class B extends A

{

void Meth1(int i){}

}

这就是重写,方法所接收的参数并没有改变。而当我创建一个对象去调用这个方法时,根据对象的不同,调用的方法将不同。例:

class C

{

public static void main(String[] args)

{

B x11=new B(); //创建一个b的对象

x11.Meth1(); //这时候调用的实际上就是B类的meth1,父类的meth1被

//隐藏了。

A x12=new A();

x12.Meth1(); //这时候调用的methe1就是A的methe1了

}

}

而改变方法参数的就是重载。例

class A

{

void Meth1(int i){}

}

class B

{

void Meth1(float j){}

}

这时候就是重载,可以看到,方法所需要的参数改变了。而这个时候,创建对象,调用者两个方法,一是看对象是哪个类的对象,二是看调用时候传递的参数是什么来决定具体的调用哪个方法。

class C

{

public static void main(String[] args)

{

A x11=new A();

x11.Meth1(); //A的对象当然只能调用A里面的meth1了

B x12=new B();

B.Meth1(1); //传递的是int,就调用int的那个

B.Meth1(1.1); // 传递的是float,就调用float的那个

}

}

如何理解Java中的隐藏与覆盖

隐藏与覆盖类方法

在讲清这个问题之前,先明白什么是隐藏?什么是覆盖?

所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;对于覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。

所以在执行Student1 s = new Graduate1();和Graduate1 g = new Graduate1();时,(1)先进行Student1类的构造,这里包括两个方法study()和exercise(),由于study()方法被覆盖,所以先执行Graduate1里study(),再执行Student1里的exercise();(2)再进行Graduate1类的构造,同样包括两个方法study()和exercise(),所以执行顺序为先Graduate1里的study()方法,再Graduate1里的exercise()方法。

2. 隐藏与覆盖成员变量

如果子类中的变量和父类中的变量具有相同的名字,那么子类中的变量就会隐藏父类中的变量,不管他们的类型是什么,也不管他们是类变量还是实例变量。

所以在执行诸如System.out.print(s.math);之类的s实例的程序时,显示为Student1类的成员变量,而执行诸如System.out.print(g.math);之类的g实例的程序时,显示为Graduate1类的成员变量。

java隐藏对象的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java隐藏对象、java隐藏对象的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-20,除非注明,否则均为首码项目网原创文章,转载请注明出处。