这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏) 成员变量在Java中能够被重写么?...意思就是: 在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。...而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。...其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。...访问隐藏域的方法 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子中的代码 就是使用类型转换System.out.println(((Super)c1).s); 翻译自http://www.programcreek.com
7.1对象的魔力 面向对象程序设计中的术语对象(object)基本上可以看做数据(特性)以及由一系列可以存取、操作这些数据的方法所组成的集合。使用对象替代全局变量和函数的原因可能有很多。...真正重要的是如何让对象按照你所希望的方式工作,不管它是否是正确的类型(或者类)。 7.1.2封装 封装是对全局作用域中其他区域隐藏多余信息的原则。...多态可以让用户对于不知道是什么类(或对象类型)的对象进行方法调用,而封装是可以不用关心对象是如何构建的而直接进行使用。听起来还是有些相似?...‘sir lancelot’ 假设变量0将它的名字存储在全局变量globalName中: >>>globeName ‘sir lancelot’ 这就意味着在使用OpenObject类的实例时候,不得不关心...最后一个方法调用看起来与函数调用十分相似,但是变量birdsong引用绑定方法bird.sing上,也就意味着这还是对self参数的访问。 默认情况下,程序可以从外部访问一个对象的特性。
2、关键字const是什么含意? 正确答案: 在标准C++中,这样定义的是一个常量,用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。...为了使这种行为可行,我们把基类Shape中的函数Draw()声明为虚函数,然后在派生类中重新定义Draw()使之绘制正确的形状,这种方法叫覆盖,虚函数的声明方法是在基类的函数原型之前加上关键之virtual...5、C++中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中? 正确答案: 栈: 存放局部变量,函数调用参数,函数返回值,函数返回地址。...正确答案: 同步多个线程对一个数据类的同时访问 17、 C++中引用和指针的区别?...通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。 12、内存的分配方式的分配方式有几种? 正确答案: 1)从静态存储区域分配。
Java 进阶面试题(共110+)1 0.1 + 0.2 0.3 正确么?为什么?2 为什么 byte 取值范围为 -128~127?3 2 * 8 最有效率的计算方法是什么?...38 Java 反射机制的优缺点?39 Java 反射机制 Class 类有哪些常用方法?40 Java 反射可以访问私有方法吗?41 Java 反射可以访问私有变量吗?...42 Java 反射可以访问父类的成员吗?43 Java 反射可以访问父类的私有方法吗?44 Java 反射可以访问父类的私有变量吗?45 Java 反射有没有性能影响?...90 Java 中的 :: 是什么语法?91 接口是否可以继承接口?92 接口里面可以写方法实现吗?93 接口默认方法和静态方法是什么?...106 JDK 实现定时任务有哪些方式?107 Java 事件机制包含哪三部分?108 Java 中的 UUID 是什么?
01 封装概述 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 这是什么意思呢?...我们将一些功能封装到类中,而客户端的程序员,不需要知道类中的这个方法的逻辑原理,类程序员只需要给他一个对外的接口,客户端程序员只需要能够调用这个方法即可, 例如:夏天宿舍很热,我们(用户)只需要操作遥控器即可使用空调...“锁” 了起来,而我们外界是可以通过创建对象来调用一个类中的公共方法的,所以被public修饰的 set和get方法外界所能访问的,而这两个方法又可以直接访问我们的私有成员变量,所以set和get方法就成为了私有成员与外界沟通的钥匙...所以在赋值之前应该先对数据进行判断 StudenDemo是一个测试类,测试类一般只创建对象,调用方法 所以这个判断应该定义在Student类中。需要使用逻辑语句 逻辑语句应该定义在方法中。...所以在Student类中提供一个方法来对数据进行校验 但是如果偏偏不调用方法来赋值,还是直接赋值,这样我们的方法就没有起作用 所以我们必须强制要求使用我的方法,而不能直接调用成员变量 这也正是我们使用private
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例的情况下被访问。...6、是否可以在static环境中访问非static变量? 不可以。static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。...每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。 23、Iterator和ListIterator的区别是什么?...但是,立即开始还是延迟进行垃圾回收是取决于JVM的。 39、finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?...本地变量:在方法体,构造体内部定义的变量,在方法结束的时候就被摧毁 实例变量:在类里但是不在方法里,在类被载入的时候被实例化 类变量:在类里但是不在方法里,加了 static 关键字,也可以叫做静态变量
public 修饰的任一地方都可以访问; protect 修饰的同一包下的以及它的子类可以访问; 不写(default),只有同一包下的可以访问; private 修饰的只有当前类以及当前类的内部类能访问...优点是什么? 写在一个类里面的类,叫做内部类。优点是对外部不可见,有很好的封装性,而且可以访问私有变量。 6. 什么是 java 的多态? 多态就是要到运行时才能确定类型,体现为重载和重写。...加载的先后顺序是:父类静态成员变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。 9....short 接收也是向下转型,要强转; s = s + 1还是错误的,需要强转;s += 1 是正确的,+= 隐含了强转。...在运行过程中可以获取任意一类的任意属性和方法,可以调用任意一类的属性和方法,这种动态获取信息动态调用对象的机制叫反射。 15. 反射有几种方式?
答案:内部类是指在一个外部类的内部再定义一个类,内部类对外部类有访问权限,可以访问类中定义的所有变量和方法。...Q3:静态方法和静态变量的目的是什么? 答案:静态变量被类的所有实例共用,静态类只能访问类的静态变量,或调用类的静态方法。 Q4:什么是数据封装及其意义?...答案:类的私有成员在该类的范围之外是不可访问的,即使在同一个包中也不能访问任何其他类。 Q46:同一类中可以定义重名的方法吗?...答案:变量和方法的默认访问说明符是protected,即变量和类可用于同一个包中的任何其他类。 Q50:举一个在Java类中使用指针的例子。 答案:Java中没有指针。...答案:正确,虽然Java编译器规定程序的入口点为staticmain,但是没有main()还是能够编译,只是不能运行。 Q62:我们可以在静态方法中调用非静态方法?
装载顺序: 1)装载——查找并装载类型的二进制数据 2)连接——执行验证(确保被导入类型的正确性),准备(为类变量分配内存,并将其初始化为默认值),以及解析(把类变量中的符号引用转换为正确的初始值) 3...)初始化——把类变量初始化为正确的初始值 3.3方法区 在java虚拟机中,关于被装载类型的信息存储在一个逻辑上被称为方法区的内存中。...类型信息: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型 这个类型的访问修饰符 任何直接超接口的全限定名的有序列表 该类型的常量池 字段信息 方法信息 除了常量以外的所有类...另一种设计方式是使对象直接指向一组数据,而数据包括对象实例数据以及指向方法区类数据的指针。这种设计方式的优点是只需要一个指针就可以访问对象的实例数据,但是移动对象就变得更加复杂。 ?...编译器首先按声明的顺序把这些参数放入局部变量数组。 在java中,所有的对象都按引用传递,并且都存储在堆中,永远都不会在局部变量区或操作数栈中发现对象的拷贝,只会有对象的引用。
在 java 中是单继承的,也就是说一个类只能继承一个父类。 java 中实现多继承有两种方式 , 一是接口,而是内部类 ....这说明 sb 指向的还是原来的对象,而形参 s 指向的才是创建的对象, 这也就验证了 java 中的对象传递也是值传递。 8. 接口和抽象类的区别是什么 ? 不同点在于: 1. ...局部变量所需的内存空间在编译器间确定 4. 操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式 5. ...当多个线程访问某个类时,不管运行时环境采用何种调度方式或者线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为。 ...线程安全的核心是 “ 正确性 ” ,也就是说当多个线程访问某个类时,能够得到预期的结果,那么就是线程安全的。
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。...4.是否可以在static环境中访问非static变量? static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。...6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。...但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。 Java接口中声明的变量默认都是final的。...每一个集合类都包含了可以返回迭代器实例的 迭代方法。迭代器可以在迭代的过程中删除底层集合的元素。 21.Iterator和ListIterator的区别是什么?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。...4.是否可以在static环境中访问非static变量? static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。...6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。...但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。 Java接口中声明的变量默认都是final的。...这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。 37.finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
变量与方法 成员变量与局部变量的区别有哪些 在Java中定义一个不做事且没有参数的构造方法的作用 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 一个类的构造方法的作用是什么?...若一个类没有声明构造方法,改程序能正确执行吗?为什么? 构造方法有哪些特性? 静态变量和实例变量区别 静态变量与普通变量区别 静态方法和实例方法有何不同?...在一个静态方法内调用一个非静态成员为什么是非法的? 什么是方法的返回值?返回值的作用是什么? ⑤. 内部类 什么是内部类?...内部类的分类有哪些 内部类的优点 内部类有哪些应用场景 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final? 内部类相关,看程序说出运行结果 ⑥....值传递 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 为什么 Java 中只有值传递 值传递和引用传递有什么区别 ⑨.
类中的成员需要私有的时候使用private关键字 特点:是一个权限修饰符。可以修饰成员(成员变量和成员方法) 被private修饰的成员只在本类中才能访问 2.13 为什么要有 this 关键字?...在类中的位置不同 成员变量:在类中方法外 局部变量:在方法定义中或者方法声明上 在内存中的位置不同 成员变量:在堆内存 局部变量:在栈内存 生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失...隐藏实现细节,提供公共的访问方式;提高了代码的复用性;提高安全性。 6.3 Java 中的类的继承特点是什么以及继承的注意事项?...new 子类() 6.9 多态中成员(成员变量,成员方法,静态成员方法)的访问特点是什么?...访问成员变量编译看左边 , 运行看左边 因为成员变量其实就是属性,属性就是只该事物的描述信息,所以使用父类在访问的时候,访问的就是父类的成员变量 成员方法编译看左边,运行看右边 这个是多态的本质,存在动态绑定的机制
每当不知道对象是什么样就能对其执行操作,都是多态在起作用 多态以 继承 和 重写 父类方法 为前提 多态是调用方法的技巧,不会影响到类的内部设计 多态性即向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为...就像C++类使用private、protected一样对类的成员访问进行限制一样 默认情况下,Python中的属性和方法都是公开的,可以在对象外部访问 私有变量 Python并没有真正的私有化支持...那种仅限在一个对象内部访问的“私有”变量在Python中并不存在 使用双下划线将方法或属性变为私有时,在内部,Python将以双下划线开头的名字都进行转换,即在开头加上一个下划线和类名。...但这样的私有变量或方法还是可以访问的,访问形式如:实例名._类名变量名、实例名._类名方法名() 以单下划线开头的时保护成员变量,只有本类和子类成员实例能访问这些变量 ?...,将在父类中查找 在子类中可以重写超类的方法(包括构造函数),重写构造函数时,要确保在子类的构造函数中调用超类的构造函数,否则可能无法正确的初始化对象 Python中所有的方法实际上是virtual
下列标识符(名字)命名原则中,正确的是( ) D A. 类名的首字母小写 B. 变量和方法名的首写字母大写 C. 接口名的首写字母小写 D. 常量完全大写 27....在类方法中可用this来调用本类的类方法 B. 在类方法中调用本类的类方法时可直接调用 C. 在类方法中只能调用本类中的类方法 D. 在类方法中绝对不能调用实例方法 11....下面哪三个描述是正确的? BCE A. 默认构造器初始化方法变量 B. 默认构造器有和它所在类相同的访问修饰词. C. 默认构造器调用其父类的无参构造器. D....,所以它的地址栏中还是原来的地址。...Static变量是什么含义 static是静态变量,就是变量值不随函数执行结束而消失,下次调用同一函数时,上次所赋予的值仍存在。 9. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?
3.”static”关键字是什么意思? “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。...4.可以在static环境中访问非static变量? static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。...如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。 5.Java支持的数据类型有哪些?...当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个默认的构造函数。 Java中构造函数重载和方法重载很相似。...但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。 抽象类可以在不提供接口方法实现的情况下实现接口。 Java接口中声明的变量默认都是final的。
将子类对象赋值给父类对象,相当于将子类中的父类成员变量赋值给父类 ?...,基类的成员/方法在子类中都变为保护或者私有的了,所以转换之后基类也无法通过指针访问 class A{}; class B :public A{}; class C :protected A{}; int...main() { A *a; B b; C c; a = &b; //正确 a = &c; //错误 return 0; } ②B不论以什么方式继承于A,B的成员函数和友元中可以将派生类对象向基类转换...: 静态类型的类变量:在编译时就已经知道是什么类型的了 动态类型的类变量:自己所指的类型不明确,直到运行时才知道 如果表达式既不是引用也不是指针,那么其就没有静态类型和动态类型的概念,因为其只能与自己类型一致的对象绑定到一起...()函数为虚函数,但是多态只有发生在基类指针/引用指向于派生类的情况下才会发生,此处基类是普通对象,而不是引用/指针,因此访问的还是A中的show2()函数 ?
领取专属 10元无门槛券
手把手带您无忧上云