类的继承,抽象类,接口,方法重写和重载

类的继承

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+" 性别:"+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()+" 性别:"+getSex()+" 成绩:"+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     }  

}

原文地址:https://www.cnblogs.com/danmao/p/3810348.html