继承的实现
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标注
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]);
}
}
}