继承的实现

class 子类 extends 父类{} 

继承的限制

限制一:一个子类只能继承一个父类

Java允许多层继承,不允许多重继承

限制二:子类会继承父类的所有属性、方法,私有属性、方法的继承属于隐式继承,非私有属性、方法的继承属于显式继承 

私有属性也被继承下来,但是无法直接使用。即私有属性跟私有方法都是不可直接调用的 

例:

class person{
	private String msg;
	public void setMsg(String msg){
		this.msg=msg;
	}
	public String getMsg(){
		return this.msg;
	}
}

class son extends person{
	public void print(){
		System.out.println("你好");
	}
}




public class test {
	public static void main(String args[]){
		person a=new person();
		son s=new son();
		s.setMsg("zhangsan");
		
		System.out.println(s.getMsg());
	}
	
}

限制三:程序中虽然实例化的是子类对象,但是它会默认先执行父类构造,调用父类的构造方法体执行,而后再实例化子类对象,调用子类构造方法。此时,对于子类的构造而言,就相当于隐含了一个super9()的形式。

默认情况子类会调用父类无参构造,但是如果此时父类没有无参构造,则子类必须通过super()调用指定参数的父类构造方法

 例:

class A{
	public A(String msg){
		System.out.println("*********父类构造***********");
		System.out.println("msg="+msg);
	}
}

class B extends A{
	public B(){
		super("Hello MLDN");
		System.out.println("++++子类无参构造++++++");
	}
}



public class test {
	public static void main(String args[]){
		B b=new B();
	}
	
}


覆写:在子类中定义跟父类完全相同的方法或属性名称

 继承使子类跟父类之间产生联系,而子类中有可能定义和父类完全相同的属性或方法名称,这就称为覆写

方法的覆写

定义:子类定义了跟父类在方法名称、返回值类型、参数类型及个数完全相同的方法时,称为方法的覆写

 1.若子类覆写了父类中的某一方法后,若实例化的是子类对象,则调用的就是在子类中覆写过的该方法,如果没有覆写,则调用父类中的该方法

且被子类所覆写的方法不能拥有比父类更为严格的访问控制权限,如:private<default(不写)<public 

2.当子类覆写了一个父类方法时,若子类想要调用父类的被覆写过的方法,要在方法前加“super” 

例:

class A{
	public void print(){
		System.out.println("hello world");
	}
}

class B extends A{
	public void print(){
		super.print();
		//System.out.println("世界,你好");
	}
}


public class OverWrite {
	public static void main(String args[]){
		B b=new B();
		b.print();
	}

}

1.若父类的方法为private,则子类无法覆写该方法,也不会这样去编写代码。

Ps:别人的解答

我觉得这样写是可以的。但是!!!!这样写出来的print()方法就不叫“覆写父类方法"了,它会当你是在子类里边重新定义了一个名为print的方法。

如果你觉得这样对父类方法覆写时不保险,建议你在覆写方法前加上”@Override“,这样如果你想覆写,按照你上边写的,编译器就不会通过编译,也就不会出现上边所说的”它会当你是在子类里边重新定义了一个名为print的方法“问题,这是最保险的做法。我认为。

例:
class A{
	private String msg="hello";
	private void print(){
		System.out.println("msg=" + this.msg);
	}
	
}

class B extends A{
	public String msg="world";
	 @Override
	 public void print(){     //错误 The method print() of type B must override or implement a supertype method
		System.out.println("msg=" + this.msg);
	} 
}


public class OverWrite {
	public static void main(String args[]){
		B b=new B();
		b.print();
	}

}

java注解

,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的。

注解又叫java标注,java提供了一套机制,使得我们可以对方法、类、参数、包、域以及变量等添加标准(即附上某些信息)。且在以后某个时段通过反射将标注的信息提取出来以供使用。

自定义Java标注

Java从1.5版本以后默认内置三个标注:

Ø @Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。

Ø @Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.

Ø @SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.

但是,仅仅这三个标注是不能满足我们开发时一些需求的。所以java允许我们自定义注解来使用。 

数组动态内存分配

class Array{
	private int[] data;
	private int foot=0; //控制数组脚标
	public Array(int len){    //构造函数,由外部传递数组大小
		if(len>0){
			this.data=new int[len];
		}
		else{
			this.data=new int[1]; //维持数组长度为1
		}
	}
	public boolean add(int num){    //往数组中添加元素
		if(this.foot<this.data.length){
			this.data[foot++]=num;
			return true;
		}
		else 
			return false;
	}
	public int[] getdata(){ //取得数组中全部数据
		return this.data;
	}
	public void increment(int num){     //数组长度增加
		int [] newArr=new int[this.data.length+num];
		System.arraycopy(this.data, 0, newArr, 0, data.length);
		this.data=newArr;
	}
}


public class TestDemo {
	public static void main(String args[]){
		Array arr=new Array(3);
		arr.add(4);
		arr.add(10);
		arr.add(14);
		arr.increment(2);
		arr.add(0);
		arr.add(8);
		int []result=arr.getdata();
		for(int i=0;i<result.length;i++){
			System.out.println(result[i]);
		}
	}

}