继承的重要意义就不多废话的,简单来说就是通过继承某个类,可以避免重复写代码。
例如。写好了人这个类。接下来,要写一个厨师的类,于是,因为我知道厨师是人,所以我看可以在人这个类的基础上,加上一些东西,形成厨师这个类,所以,我就决定继承人这个类,加上一些特性,形成厨师。
继承的时候,涉及到继承的权限的问题,会有public和private
建议初学的时候,都使用public来写类,也用public来继承类,避免初学遇到麻烦。
例如:
package sunsoft.testideas;
public class VBSuperString extends VBString {
static void newid(){
String kString ="abcdefg";
kString=Mid(kString, 3);
System.out.println(kString);
}
}
这上面的,就是public继承VBString这个类,而VBString这个类的代码,如下:
package sunsoft.testideas;
public class VBString {
private StringBuilder innerStringBuilder;
public VBString() {
// TODO Auto-generated constructor stub
}
public VBString(String inputString){
innerStringBuilder.append(inputString);
}
static String Mid(String inStr,int startP,int EndPoint){
if(startP<=0){return null;}
if(startP>inStr.length()){return null;}
if(EndPoint<startP){return null;}
if(EndPoint>inStr.length()){return null;}
return inStr.substring(startP-1, EndPoint);
}
static String Mid(String inStr,int startP){
if(startP<=0){return null;}
if(startP>inStr.length()){return null;}
return inStr.substring(startP-1);
}
}
我们可以看到,类的开始地方,都是public class,这是一种默认的状况,对于初学者也是极好的。至于复杂的private,protected等等情况,另外开专题来分析。等我学到这一步再说。
继承的父类中,会有些方法不适应子类的需求,这个时候就需要覆盖父类中的方法。覆盖的时候,方法中的参数列表信息等等都必须要于父类中的一致。
- 不可以覆盖父类中,final或者static的方法
- 必须覆盖父类中abstract的方法,或者子类中也声明该方法为abstract
- 子类覆盖父类中的同名方法时,子类中方法的声明,必须和父类中方法的声明相同。
例如(创建一个继承VBString的类):
package sunsoft.testideas;
public class VBSuperString extends VBString {
static void newid(){
String kString ="abcdefg";
kString=Mid(kString, 3);
Easy.ShowL(kString);
}
public void Author(){ //这个就是覆盖父类中对应方法的方法
System.out.println("Author:SunCorp");
}
}
如下:
package sunsoft.testideas;
public class VBSuperString extends VBString {
static void newid(){
String kString ="abcdefg";
kString=Mid(kString, 3);
Easy.ShowL(kString);
}
public void Author(){
System.out.println("Author:SunCorp");
System.out.println("Following will be the father class description:");
super.Author(); //这里就是调用父类的方法
}
}
结果如下:
Author:SunCorp
Following will be the father class description:
Author:SunSoft
多态是指程序中同一操作在不同的环境下,有不同的语义解释。前面讲的类的继承、方法重写,都是多态的体现。
方法的重载,是同样的方法名,对应不同的参数类型列表,有不同的代码功能,从上面的VBString类中可以看出这一点。
对于一个对象,它既是本类的一个实例,它也可被看做父类的一个实例,成为向上转型。