類的繼承
C#與java:
1、C#中繼承用“:”,Java中繼承用extends
2、重寫父類的方法,C#中需要關鍵字override,Java中不需要
3、C#中調用父類的成員用base,Java中使用super
4、子類的構造方法中如果沒有顯示的調用父類的構造方法,
編譯器會自動在第一行代碼添加super()
抽象類:
1、含有抽象方法的類必須是抽象類,抽象類中不一定有抽象方法
2、抽象類的子類如果是抽象類,可以不需要重寫父類的抽象方法
3、抽象類不能被實例化,構造方法和靜態方法不能是抽象的
接口:
1、java中接口可以有字段(該字段是靜態常量),C#中接口不能有字段
2、java中接口成員可以顯示加上public,C#中接口不能顯示加上Public
方法:
方法重寫:
1、需要有繼承關系
2、子類重寫父類的方法
3、方法的名字、返回值、參數列表要保持一致
4、子類重寫的方法訪問修飾符權限要大於等於父類中被重寫的方法的訪問修飾符權限
方法重載:
1、在同一個作用域
2、方法名稱相同
3、參數列表不同(個數、類型、順序)
4、與返回類型無關
例子
(1、類的繼承,方法重寫)
/**
* 人類(父類)
* @author Administrator
*
*/
public class Person {
private String name;//姓名
private String sex;//性別
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//無參的構造方法
public Person(){
System.out.println("父類中無參的構造方法被調用!");
}
//帶兩個參數的構造方法
public Person(String name,String sex){
this.name = name;
this.sex = sex;
System.out.println("父類中帶2個String參數的構造方法被調用!");
}
//自我介紹(相當於C#中的虛方法,可以被子類重寫也可以不被子類重寫)
public void introduce(){
System.out.println("大家好!我的姓名:"+this.name+"\t性別:"+this.sex);
}
}
/**
* 學生類(子類)
* @author Administrator
*
*/
public class Student extends Person
{
private float score;
public float getScore()
{
return score;
}
public void setScore(float score) {
this.score = score;
}
public Student(String name,String sex,float score){
this.setName(name);
this.setSex(sex);
this.setScore(score);
}
//重寫父類的自我介紹(java中重寫不需要關鍵字override)
public void introduce(){
System.out.println("大家好!我的姓名:"+getName()+"\t性別:"+getSex()+"\t成績:"+this.score);
}
}
抽象類
package com.AbstractTest;
/**
*定義抽象類
*/
public abstract class Person
{
public String name;
public int age;
public abstract void work();//抽象方法
}
/**
*繼承抽象類
*/
package com.AbstractTest;
public class ChineseTeacher extends Teacher {
//實現抽象方法,也就是重寫方法
@Override
public void work()
{
System.out.println("語文授課");
}
}
接口
/**
*定義接口
*/
package com.InterfaceTest;
public interface IMust
{
int a = 10;//靜態常量,相當於public static final int a=10;
public void eat();//public可以加也可以不加,如果沒加編譯器會自動加
void sleep();
}
package com.InterfaceTest;
/**
* 接口的擴展
* @author Administrator
*
*/
public interface ISporter extends IMust{
void sport();
}
package com.InterfaceTest;
/**
* 運動員類
* @author Administrator
*
*/
//注意:一個類可以繼承一個父類,實現多個接口
public class Sporter extends Person implements ISporter,IMatch {
@Override
public void eat(){ }
@Override
public void sleep() { }
@Override
public void sport() { // TODO Auto-generated method stub }
@Override
public void match() { // TODO Auto-generated method stub }
}