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

类的继承

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     }

}

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

时间: 2024-11-02 10:20:16

类的继承,抽象类,接口,方法重写和重载的相关文章

封装、继承和多态,重写、重载等基础复习

重载overloading 1.方法名相同,形参不同(包括参数顺序不同.类型不同.个数不同): 2.方法的返回值类型可同也可不同,所以不能用返回值类型来区分重载函数: 3.重载方法与被重载的方法可以抛出不同的异常: 4.重载体现了多态的特性:调用方法时根据传递的参数不同来决定具体调用那个重载方法,这就是多态性: public class Dog { Dog() { this.bark(); } //bark()方法是重载方法 void bark(){ System.out.println(\"n

java基础第五天_静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. 静态代码块在类加载的时候执行,而且只执行一次. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 构造代码块调用顺序优先于构造方法,和方法的声明位置无关. 构造代码块作用:a.可以存放多个构造方法的共同代码,提升代码的重复性 b.对成员变量初始化 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 类加载时默认执行静态代码块. 手动控制类加载使用Class.forName("classname"

第三章:继承/抽象类/接口

继承 在面向对象编程中,有两种截然不同的继承类型,实现继承和接口继承;C#中不支持多重继承,C#类可以派生自另一个类和任意多的接口 实现继承:表示一个类型派生自一个基类型,它拥有该基类型的所有成员字段和函数,在需要给现有类型添加功能或者许多相关类型共享一组重要的公共功能时.这种类型继承非常有用 接口继承:表示一个类型只继承了函数的签名,没有继承任何的实现代码 实现继承virtual/override /// <summary> /// 基类 /// </summary> class

IT十八掌作业_java基础第五天_静态代码块、类的继承和接口

1.文字阐述静态代码块的作用. A:静态代码块常用来执行类属性的初始化,且只被执行一次. 2.构造代码块与构造函数的调用顺序如何?和方法的声明位置是否有关?为什么?构造代码块的作用是什么? 执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 和位置无关. 构造代码块在每次创建对象是都会执行. 3.类加载时,是否一定会执行静态代码块?如何手动控制类加载? 类加载时默认加载静态代码块,class.forName(String name) 或 class.forNa

PHP类的继承和接口

PHP类的继承的一些语法 -PHP的类只支持单继承,就是每个类最多只能有一个父类或者没有父类. -子类不能继承父类使用private修饰的成员. 修饰符 可访问范围 public 当前类.子类和类外 protected 当前类和子类 private 当前类 类的类型 含义 被final修饰的类 只能实例化不能被继承 被abstract修饰的类 只能被继承不能被实例化 注意: 被final修饰的方法不能被子类重写. -通常要被子类继承的成员都使用protected,其余的尽量使用private,把

继承、多态及方法重写、重载

1.多态: 多态指的是同一个方法的调用,由于对象不同可能会有不同的行为.现实生活中,同一个方法,具体实现完全不同. 多态的要点: (1)多态是方法的多态,不是属性的多态(多态与属性无关): (2)多态的存在要有3个必要条件:继承.方法重写.父类引用指向子类对象: (3)父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了. /** * - - - (1)多态是方法的多态,不死属性的多态(多态与属性无关): * - - - (2)多态的存在要有3个必要条件:继承.方法重写.父类

【C# 复习总结】类、继承和接口

1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指定或者省略效果是一样的,所以上面的两个例子是完全相同的. C#中类包括:抽象类.密封类.非抽象类 abstract:表示修饰的类不完整,也就是抽象类,只能用做基类. 在使用是不能直接实例化, 不能使用new运算符. sealed:表示修饰的类不可派生,也就是密封类. base:访问最近的基类,也就是

面向对象_05【类的继承:extends、重写父类】

类的继承:现有类的基础上构建一个新的类,构建出来的类被称作子类,子类可继承父类的属性和方法. 什么时候定义继承?当类与类之间存在着所属关系的时候,就定义继承.xxx是yyy中的一种==>xxx extends yyy 继承好处: 1,提高代码复用性 2,让类与类之间产生关系,给多态提供前提 单继承:一个子类只能有一个直接父类.多继承:一个子类可以有多个直接父类(Java中不允许,进行改良) ==>不直接继承,因为多个父类中有相同成员,会产生调用的不确定性 在Java是通过"多实现&q

PHP 类的继承 访问修饰符 重写

类的继承: 某些类A具有的某些特性,另一个类B,也具有A类的所有特性并且也有自己的特性,此时我们就可以实现B类使用A类的特性信息并继续添加自己的一些特有的特征信息  关键字是:extends基本概念:   继承:一个类从另一个已有的类获得其特性,称为继承   派生:从一个已有的类产生一个新的类,称为派生   也可以理解为:已有类为父类,新建类为子类,父类也叫基类,子类也叫派生类   一个类只能从一个上一级类继承其特性 叫单继承   多继承的话 就是继承他父类的父类 也就是爷爷类访问(权限)修饰符