前言:
现时你们对“抽象类可以有方法的实现吗对吗”大体比较关心,朋友们都想要剖析一些“抽象类可以有方法的实现吗对吗”的相关知识。那么小编在网摘上网罗了一些有关“抽象类可以有方法的实现吗对吗””的相关知识,希望大家能喜欢,我们快快来了解一下吧!1、抽象类的定义
在面向对象的概念中,所有对象都是通过类来描述的。抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
2、为什么要有抽象类?父类知道子类一定要完成某个功能,但是每个子类完成的情况是不一样的。子类以后也只会用自己重写的功能,那么父类的功能就可以定义为抽象方法。子类重写后,实例化子类(调用子类自己的)就可以了。这个父类就成为抽象类。3、一个典型的抽象类3.1 抽象类的内容
在C#中,抽象类可以包含:抽象方法、抽象属性、具体方法和具体属性。
(1)一个典型的抽象类的定义
访问修饰符 abstract class 类名{ 访问修饰符 abstract 返回值类型 方法名(参数列表); //定义抽象方法 其他类成员;}
(2)抽象方法和抽象属性
// 抽象方法public abstract double GetName();// 抽象属性public abstract string Name { get; }3.2 抽象类的例子
注意:子类必须实现父类的抽象方法,否则报错,哈哈!
(1)比如定义一个运动员类。属性有:姓名,国家,方法有:competition。每个运动员的竞赛项目内容都不同。
public abstract class Sportsman{ public String? Name { get; set; } public String? Country { get; set; } // 构造函数 public Sportsman() { Console.WriteLine("Sportsman默认构造函数"); } //构造函数方式1 public Sportsman(String name, String country) { Name = name; Country = country; Console.WriteLine("Sportsman赋值的构造函数"); } //抽象类可以有自己的属性和方法 public void Breathe() { Console.WriteLine("I'm Free breathing!"); } //注意:下面申明为抽象方法,不能有具体的实现 public abstract void Competition();}
(2)我们继承一下抽象类,其实C#和JAVA的实现都差不多,C#的例子先把
public class Runner : Sportsman{ //抽象方法,必须实现,override public override void Competition() { Console.WriteLine("I'm running on the playground."); }}public class Swimmer : Sportsman{ //调用了父类的构造函数使用了:base public Swimmer(string name, string country) : base(name, country) { Console.WriteLine("Swimmer的构造函数"); } //抽象方法,必须实现,override public override void Competition() { Console.WriteLine("I'm swimming in the water."); } //随意再扩展一个方法 public void LoveWater() { Console.WriteLine("I am LoveWater"); }}
(3)完整的代码和测试结果
// See for more information//Console.WriteLine("Hello, World!");public abstract class Sportsman{ public String? Name { get; set; } public String? Country { get; set; } // 构造函数 public Sportsman() { Console.WriteLine("Sportsman默认构造函数"); } //构造函数方式1 public Sportsman(String name, String country) { Name = name; Country = country; Console.WriteLine("Sportsman赋值的构造函数"); } //抽象类可以有自己的属性和方法 public void Breathe() { Console.WriteLine("I'm Free breathing!"); } //注意:下面申明为抽象方法,不能有具体的实现 public abstract void Competition();}public class Runner : Sportsman{ //抽象方法,必须实现,override public override void Competition() { Console.WriteLine("I'm running on the playground."); }}public class Swimmer : Sportsman{ //调用了父类的构造函数使用了:base public Swimmer(string name, string country) : base(name, country) { Console.WriteLine("Swimmer的构造函数"); } //抽象方法,必须实现,override public override void Competition() { Console.WriteLine("I'm swimming in the water."); } //随意再扩展一个方法 public void LoveWater() { Console.WriteLine("I am LoveWater"); }}class demo{ static void Main(string[] args) { //(1)抽象类不能直接实例化 // Sportsman sportsman = new Sportsman(); //(2)子类继承重写后,可以实例化 Runner runner = new Runner(); runner.Competition(); runner.Breathe(); //(3)子类继承重写后,可以实例化 Swimmer swimmer = new Swimmer("Li", "China"); swimmer.Competition(); swimmer.LoveWater(); swimmer.Breathe(); }}
测试结果如下:
3、抽象类的特点
(1)抽象类不能被实例化
(2)抽象类可以有实现(包括构造函数)
(3)抽象类中可以有成员变量(包括静态成员变量)、属性、常量和静态方法,并且他们可以是非公共的。
(4)一个类只能从一个抽象类派生
(5)抽象类可以从另一个类或一个/多个接口派生(后面再补充接口)。
4、再次问问为什么要有抽象类
如果你设计了一款面向对象语言,为什么要设计抽象类。
(1)有共同可抽象的特征。
(2)这个抽象类你直接用的话还不可以,你对应设计的子类都要实现它
(3)不实现它就报错,咳咳。
标签: #抽象类可以有方法的实现吗对吗 #java继承抽象类