成员变量的隐藏,方法的覆盖,super关键字
成员变量的隐藏:当父类和子类有相同的成员变量时,即定义了与父类相同的成员变量时,就会发生子类对父类变量的隐藏。对于子类的对象来说,父类中的同名成员变量被隐藏起来,子类就会优先使用自己的成员变量,父类成员隐藏。
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”后面。
成员变量的隐藏,方法的覆盖,super关键字的更多相关文章
- Java中方法的重写与成员变量的隐藏
		这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量) 在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么? public class ... 
- Java中变量之局部变量、本类成员变量、父类成员变量的访问方法
		变量:局部变量.本类成员变量.父类成员变量 如何访问:如果变量名相同,则采用就近原则,哪个变量离所要调用的访问最近,那就么就输出,优先顺序为:局部变量 > 本类成员变量 > 父类成员变量 ... 
- 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字
		在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. package text; class Parent { int x; public Parent() { ... 
- java方法重写和super关键字
		//java方法重写和super关键字 //在继承中,其实就是子类定义了和父类同名的方法 //就是方法,属性都是相通的 //重写限制: //被子类重写的方法不能拥有比父类方法更加严格的权限 //sup ... 
- JAVA成员变量的隐藏
		一.如果子类与父类中有一个相同名称的成员变量,那么子类的成员变量会不会覆盖父类的成员变量?我们看下在的例子: public class A { public int x=10; } public cl ... 
- Java面向对象之继承,方法重写,super关键字,员工类系列继承题
		在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ... 
- Java方法重写与super关键字
		----------siwuxie095 方法的重写: (1)在继承中也存在着重写的概念,其实就是子类定义了和父类同名的方法 (2)定义:方法名 ... 
- 反射【类Class、成员变量Field、方法Method】
		Class<?> c = Class.forName("main.Main$MyClass"); //要包名+类名 Object obj = c.newInstance ... 
- java类中的static成员变量和static方法简单介绍,持续补充
		一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方 ... 
随机推荐
- DS实验题 击鼓传花
			题目: 代码1(数组实现): // // main.cpp // DS-击鼓传花 // // Created by wasdns on 16/11/9. // Copyright © 2016年 wa ... 
- 如何查询MySql日志
			如何查询MySql日志 分类: mysql2012-02-23 19:14 26756人阅读 评论(2) 收藏 举报 mysqlcommandprintingserversocketoutput 今天 ... 
- jquery()的三种$()
			jQuery中的$以及选择器总结 $号是jQuery”类”的一个别称,$()构造了一个jQuery对象.所以,”$()”可以看作jQuery的”构造函数”(个人观点). 一.$符号 1.$()可以是$ ... 
- vue model双向绑定
			view <div id='demo' class="container"> <input type="text" v-model='name ... 
- BAE3.0上的java+tomcat代码发布
			---------------------------------2016/01/25更新-------------------------------------- 最近两天去百度开放云,发现它再也 ... 
- C# json object互转工具
			public static T Deserializer<T>(string path) { try { System.Xml.XmlDocument xd = new System.Xm ... 
- 【Android开发学习笔记】【随笔】UI线程
			概念 UI线程 是Android中的主线程,涉及到UI方面的一些操作都需要在ui线程中进行操作 在非ui线程中想操作ui,就会报错 android.view.ViewRoot$CalledFromWr ... 
- MongoDB创建用户
			1.在创建用户之前,我们首先应该启动mongodb的用户验证功能,否则建立用户是没有意义的! 2.使用 //这个123用户拥有test1数据库的数据库管理员权限,拥有test2数据库的读取权限 db. ... 
- .Net程序员安卓学习之路3:Post数据给网络API
			本例我们实现一次真正的网络交互,将数据POST到API,然后接收服务器的返回值进行处理,同时引入自定义类型和传说中阿里的FastJson. 实现思路如: 1. 在API端接收客户POST的数据还原成对 ... 
- cell的imageVIew的fram问题
			今天你在输出cell的imageVIew的fram时,发现新建的cell的imageVIew的frame是(0,0,0,0),但是重用的cell的imageVIew的frame输出是(15,19,30 ... 
