当前位置:首页 > 抽象类和抽象方法学习指导书
抽象类和抽象方法学习指导书
一:学习目标
知识点 抽象类和抽象方法 1、 抽象类 2、 抽象方法 3、 抽象方法和虚方法的对比 4、 抽象类和抽象方法的应用 知识点重要性 掌握程度 知识点关联 要学习好抽象类和抽象方法必须能熟练运用类和方法的相关知识,在学习抽象类和抽象方法过程中要不断对比其与我们以前学习的类和方法有哪些不同点,只有掌握了这些区别和联系才能更加深刻地理解和使用抽象类和抽象方法,要熟练运用抽象类和抽象方法来实现多态,在以后学习的设计模式中的抽象工厂和简单工厂等模式中也会用到抽象类和抽象方法。 设计模式是一种软件开发经验的总结,是某些特定问题经过实践检验的特定的解决办法,它使代码真正工程化,是软件工程的基石。掌握了设计模式的基本概念和分类对程序的架构有很大帮助。设计模式中的一些原则和适用场合等会在设计模式专题中讲解,因此在这里掌握了其概念,分类和简单工厂模式后对以后学习设计模式及运用设计模式开发项目都有极大的帮助。另外,简单工厂中会用到静态方法,因此要熟练使用静态关键字。 极高 熟练 设计模式 1、设计模式概述 2、设计模式分类 3、简单工厂模式 一般 理解 二:重难点知识点
1、重难点1:抽象类和抽象方法
学习方法:
1、要熟练使用抽象类、抽象方法语法,具体如下: 语法:描述定义类和方法的规则
抽象类:
[修饰符] abstract class <类名> {
[字段声明] [属性声明] [方法声明] }
抽象方法:
[修饰符] abstract <返回类型> <类方法名>([参数列表]);
掌握子类如何继承抽象类
需求:有一个父类Person,它有一个抽象方法,现要用一个子类Student继承这个抽象父类,具体代码如下:
父类:要用abstract关键字修饰对应的类和方法 public abstract class Person { pblic abstract void sayHi();
}
子类:继承抽象类,并重写基类中的抽象方法。注意要用override关键字修饰重写的方法 public class Student:Person { public override void sayHi()
{
Console.writeLine(“Hello,我是子类”);
} }
2、对比虚方法来学习抽象方法,具体如下: 相同点: 都可以实现多态。 不同点: 1)虚方法用virtual来修饰,而抽象方法用abstract来修饰。 2)虚方法必须要有方法体,哪怕是一个分号,而抽象方法不能有方法体。
3)如果虚方法所在的类派生了子类,可以被子类重写,也可不被重写,而抽象类的非抽象子类必须重写其方法。
4)除了密封类外都可以包含虚方法,抽象方法只能在抽象类中。 3、总结抽象类和抽象方法的特点和适用的场合 (1)抽象方法不能有方法体。
(2)抽象方法所在的类必须是定义为抽象类。
(3)当一个非抽象类继承自抽象类时,这个子类必须实现父类中的抽象方法。 (4)静态成员上不能使用abstract关键字修饰。 4、在学习抽象类和抽象方法时需要注意以下几点: (1)必须要有对应的关键字:abstract和override
需求1:教师和学生都有跟人打招呼的方法,但跟人打招呼的内容却不相同,现要求使用多态实现教师和学生打招呼并打印出相关内容。 思路:
第一步:抽象出父类Person,并定义一个抽象方法。
第二步:抽象出两个子类Student和Teacher继承于抽象类Person,并重写父类中的抽象方法。 第三步:使用抽象类对象作为参数,实现多态。 具体代码如下: // 父类:为抽象类
public abstract class Person {
//要用关键字abstract
public abstract void sayHi();
} //子类1:
public class Student:Person {
//要用关键字override
public override void sayHi() {
Console.writeLine(“Hello,我是学生”);
} } 子类2:
public class Teacher:Person {
//要用关键字override
public override void sayHi()
{
Console.writeLine(“Hello,我是教师”);
} }
使用:运用多态性质实现输出教师和学生各自打招呼的内容。下面在测试类Test中定义一个方法,用于输出内容。关键代码如下:
public void sayHello(Person p)//方法的参数为父类类型 { p.sayHi();//根据p的具体对象调用具体的sayHi()方法。 }
在main方法中调用该方法 Person p1=new Teacher(); //得到子类teacher的对象 Person p2=new Student();//得到子类student的对象 Test t=new Test(); t.sayHello(p1); t.sayHello(p2); 输出结果为:
从输出结果可以看出,方法sayHello中在用父类对象调用sayHi方法时,系统会自动判断父类对象具
体指向的是那个子类对象,然后再调用对应的sayHi方法。
(2)使用抽象方法是要注意抽象方法不能有方法体并且抽象方法只能包含在抽象类中 例如:
错误一://实例类中包含抽象方法 public class person
{
public abstract void sayHi();//错误的,因为类不是抽象类 }
错误二:抽象方法中有方法体 public abstract class person {
public abstract void sayHi()//错误的,因为抽象方法中不能有方法体 { Console.writeLine(“你好,我是抽象方法的方法体!”);
} }
(3)注意抽象类不能被实例化,它是一个抽象的概念,抽象方法没有具体的实现,用于约束子类的行为,因此抽象类必须被实例类继承,抽象方法必须被重写。 共性问题:
1、抽象方法可以不用访问修饰符修饰吗?或是改成protected修饰? 答:抽象方法必须被子类重写的,不能是私有的,可以用public或是protected进行修饰,此时子类中重写方法的访问修饰符也必须是对应的public或是protected。
2、在实现多态时,可以将抽象类对象作为参数或返回值吗? 答:可以,它和用虚方法实现多态是同样的使用方式。 辅导视频:
详见辅导视频文件夹中的视频文件,内容为运用抽象类和抽象方法实现多态。 作业内容:
详见作业文件夹下的作业内容部分 补充阅读:
2、重难点2:简单工厂
学习方法:
1、 首先要掌握简单工厂的原理。具体如下:
客户向工厂请求一个产品,工厂创建不同的子类产品,然后作为父类产品返回给客户。这就是一个简单工厂的工作原理。
例如一个一汽大众的汽车工厂,不会只生产一种汽车,可以生产“宝来”、“捷达”等。 原理图:
共分享92篇相关文档