「java隐藏对象」Java隐藏对象
本篇文章给大家谈谈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隐藏对象的信息别忘了在本站进行查找喔。
发布于:2022-12-20,除非注明,否则均为
原创文章,转载请注明出处。