成员变量的隐藏:当父类和子类有相同的成员变量时,即定义了与父类相同的成员变量时,就会发生子类对父类变量的隐藏。对于子类的对象来说,父类中的同名成员变量被隐藏起来,子类就会优先使用自己的成员变量,父类成员隐藏。

public class yincang {
public static void main(String []args)
{
SonA son=new SonA();
son.showson();
FatherA father=new FatherA();
father.showfather();
}
}
class FatherA{
int x1=1;
int x2=2;
void showfather(){
System.out.print("x1="+x1+"\n");
System.out.print("x2="+x2+"\n");
}
}
class SonA extends FatherA
{
int x1=11;
int y1=22;
void showson(){
System.out.print("x1="+x1+"\n");
System.out.print("x2="+x2+"\n");
System.out.print("y1="+y1+"\n");

}
}

ps:该程序隐藏了父类中的x1输出了子类中的x1.隐藏和类型无关,当父类中的x1改为double型,子类还是int型,那么输出的还是子类的int型。

隐藏与修饰符无关,父类中的x1 的修饰符该为protected子类x1 的修饰符还是不变,保持默认。

方法的覆盖:子类和父类可以定义相同的方法名,这时候,对于子类的对象,调用的是自己的成员,覆盖的是父类的成员方法。

public class fugai {
public static void main(String []args)
{
FatherB father=new FatherB();
father.show();
SonB son=new SonB();
son.show();
}
}
class FatherB{
int x1=10;
int x2=20;
void show(){
System.out.print("x1="+x1+"\n");
System.out.print("x2="+x2+"\n");
}
}
class SonB extends FatherB{
int y1=30;
int y2=40;
void show(){
System.out.print("y1="+y1+"\n");
System.out.print("y2="+y2+"\n");
}

}

ps:在该程序中,在父类FatherB中有一个成员方法show(),在子类SonB中也有一个成员方法show(),那么创建子类的对象son,调用的是自己的成员方法show(),父类中的成员方法就被覆盖了。只有创建父类的对象father,调用的才是自己的成员方法。成员变量的覆盖必须是方法名,参数类型,顺序,个数,返回值完全相同。

如果方法名相同,参数类型,个数,顺序不一样是时子类继承下来形成的是重载。重载要求方法名相同,参数类型,个数,顺序不同。

public class chongzai {
int get(int x){
return x;
}
class B extends chongzai{
int get(int x,int y){
return x+y;
}
}
class test1{
public void main(String []args){
B bb=new B();
System.out.print(bb.get(4));
System.out.print(bb.get(4,5));
}
}
}

ps:在该程序中,父类的get()方法带一个参数,子类的get()方法带两个参数,子类把父类中的方法继承下来,两个get()方法形成重载关系。创建子类的对象,语句“bb.get(4)”匹配的是父类中的get()方法。而语句“bb.get(4,5)”匹配的是子类自己的方法。

如果方法名,参数类型,个数,顺序完全相同,只有返回值不同那么不是重载也不是覆盖。

不能覆盖父类中的final方法,如果父类中的方法为final,表示为最终方法,不能 被子类覆盖,也就是说最终方法能被子类继承和使用,但不能在子类中修改或重新定义它,这和常量的概念类似。

不能覆盖父类中的static方法但可以隐藏。也就是说,在子类中声明的同名静态方法实际上隐藏了父类的静态方法。

super关键字:如果子类和父类有相同的成员变量和方法时,子类会隐藏和覆盖或父类的成员变量和成员方法,使用子类自己的成员变量和方法。但如果子类想访问父类的成员变量和成员方法,怎么解决呢?解决的方法就是使用super关键字,要使用父类中被隐藏和覆盖的成员时,使用super,格式如下:

super.父类成员变量名

super.父类成员方法名

例如:

public class superlei {
public static void main(String []args)
{
Employee emp=new Employee();
emp.sete();
emp.show();
}
}
class Person{
protected String name;
protected char sex;
void show(){
System.out.println("父类中的名字为:"+name);
System.out.println("性别为:"+sex);
}
}
class Employee extends Person{
protected int salary;
protected String name;
void sete(){
name="张倩";
super.name="李斯";
salary=3000;
sex='男';
}
void show(){
System.out.println("子类中的名字为:"+name);
System.out.println("性别为:"+sex);
}

}

ps:要给父类的成员变量name赋值,必须采用一个super调用给父类的成员变量name赋值“super.name="李斯"”。同样,子类和父类有相同的输出方法show()方法,在子类的show()方法中,要调用父类的show()方法也必须通过super来调用“super.show();”.

子类构造方法:在前面的 程序中,父类都没有写构造方法,这时候父类默认有一个无参的构造方法。定义子类时,必须无条件继承父类中的无参构造,也就是说子类默认调用父类中的默认无参构造。当父类存在有参数的构造方法时,子类必须调用父类中的构造方法。子类调用父类的构造方法原则是:

1:对于父类中不含参数构造方法,子类无条件继承。

2:如果父类中是有参数的构造方法,子类这时不能默认继承无参构造,必须写super调用父类构造方法。

3:如果在子类构造方法中通过this()调用本类中其他构造方法,就不再默认调用super()。

public class gouzaofangfa {
public static void main(String []args)
{
Qun qun=new Qun(3,4,5,4.5f);
qun.show();
qun.quntity();
}
}
class Rect{
int length;
int width;
int high;
Rect(int l,int w,int h){
this.length=l;
this.width=w;
this.high=h;
}
int vert(){
int v=length*width*high;
return v;
}
}
class Qun extends Rect{
float p;
Qun(int lx,int wx,int hx,float px){
super(lx,wx,hx);
p=px;
}
void quntity(){
float m;
m=p*vert();
System.out.println("质量为"+m);
}
void show(){
System.out.println("长为:"+length);
System.out.println("宽为:"+width);
System.out.println("高为:"+high);

}
}

ps:父类Rect长方形类中定义了一个有参数的构造方法,给长,宽,高赋值。在他的派生类Qun类中,必须定义一个有参数的构造方法,并且一般要带4个参数,这是因为子类的构造方法需要给父类中的长宽高和自己的密度赋值。在子类的构造方法中,第一句语句必须是用super调用父类的构造方法“super(lx,wx,hx);”,他不能放在其他语句“p=px”后面。

转载于:https://www.cnblogs.com/Angella/p/6010641.html

成员变量的隐藏,方法的覆盖,super关键字相关推荐

  1. 重写 隐藏 java_Java中方法的重写与成员变量的隐藏

    这篇文章讨论了Java面向对象概念中一个基本的概念?Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? /** * @autho ...

  2. 5.4 成员变量的隐藏和方法重写

    5.4.1 成员变量的隐藏 子类隐藏成员变量的特点: (1)子类对象.子类自己定义的方法操作与父类同名的成员变量,是指子类自己声明的这个成员变量 (2)子类对象仍然可以调用从父类继承的方法,来操作被子 ...

  3. 01_11_Java语言入门||02_面向对象与常用类||day11_final、权限、内部类、成员变量类型和方法的参数及返回值特例

    第一章 final 1.1 final关键字和概念和四种用法 final关键字代表最终,不可改变的 常见四种用法 可以用来修饰一个类 可以用来修饰一个方法 可以用来修饰一个局部变量 可以用来修饰一个成 ...

  4. Java类定义、成员变量定义、方法定义、成员变量与局部变量的区别

    编程语言的三大发展阶段:面向机器语言.面向过程语言.面向对象语言 : 其中面向对象语言主要体现三个特征:封装性.继承.动态 : 类的定义:类声明和类体.基本格式如下: class 类名{    类体 ...

  5. vs code 不能正确补全结构体成员变量的解决方法

    vs code 在补全c语言代码时(keil工程文件)不能正确提示结构体成员变量. 解决方法: 在系统setting.json文件中找到C_Cpp.intelliSenseEngine配置删掉(或者将 ...

  6. java方法重写和super关键字

    //java方法重写和super关键字 //在继承中,其实就是子类定义了和父类同名的方法 //就是方法,属性都是相通的 //重写限制: //被子类重写的方法不能拥有比父类方法更加严格的权限 //sup ...

  7. Educoder–Java 2. 成员变量的隐藏 第1关:学习-Java继承和多态之成员变量隐藏之优惠促销价格计算

    文章目录 任务描述 相关知识 编程要求 测试说明 答案 任务描述 本关任务:计算商品打折后的价格. 相关知识 在编写子类的时候,我们仍然可以声明一些新的成员变量,其中有一种特殊的情况就是,所声明的成员 ...

  8. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

  9. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍

    参考链接: 可以重写Java中的私有方法吗 JAVA面向对象之代码块与继承 代码块分类 局部代码块 作用:限制变量生命周期 书写位置:在方法中 构造代码块 开发中很少使用 书写位置:类中  方法外 调 ...

  10. Java学习笔记day14(两个引用指向同一对象内存图解、成员变量和局部变量的区别、private关键字、this关键字、构造方法的特点、面向对象标准汽车类练习)

    *1.两个引用指向同一对象内存:  *         例子:Phone.java与Phone_Test.java /** 手机类:* 成员变量:品牌,价格,颜色...* 成员方法:打电话,发短信.. ...

最新文章

  1. [转]Entity Framework 异常: ‘OFFSET‘ 附近有语法错误。\r\n在 FETCH 语句中选项 NEXT 的用法无效
  2. [EffectiveC++]item41:了解隐式接口和编译期多态
  3. QML工作笔记-PC端和Android端布局错位问题
  4. 课程目标IO java
  5. bootstrap 导航栏 字体 颜色_设计自己的Hugo主题——开发导航栏
  6. RabbitMQ-JAVA-ClientAPI示例
  7. Elasticsearch的javaAPI之percolator
  8. 《headfirst设计模式》读书总结-包含C++代码
  9. Qt 车牌识别 (EasyPR)
  10. 如何使用ABBYY软件编辑PDF文本
  11. 简述python的安装过程_安装Python-3.5.2过程中常见的几种错误
  12. 手把手教你搭建SpringCloud项目(二)生产者与消费者
  13. app测试中,安卓和IOS有哪些区别(持续补充ing)
  14. 美国Linux服务器系统增强安全的配置
  15. Ubuntu kylin共享文件夹创建(极简)VM VirtualBox
  16. 计算机动画主要学什么,动画专业主要学什么?
  17. pdf文档转换后出现大量乱码怎么办
  18. JavaWeb(尚硅谷补充实操版)-中
  19. c语言malloc函数程序,c语言 malloc函数详解
  20. 海豚客服系统接入技巧分享:微信端和网页端

热门文章

  1. html中心点缩放,html canvas 让物体随物体中心缩放
  2. wlop一张多少钱_求解实木家具沙发垫多少钱一张
  3. 为什么基于接口而非实现编程?
  4. linux maven安装与入门
  5. Tensor Flow V2:基于Tensor Flow Keras的摄氏度到华氏度温度转换的训练模型
  6. 阿里云物联网平台体验(NetGadgeteer+C#篇)
  7. Maven项目打包成可执行Jar文件
  8. 开源大数据周刊-第46期
  9. 英国通讯服务商与采购“不公平待遇”的较量
  10. 九爷 带你了解 nginx优化与防盗链