码迷,mamicode.com
首页 > 其他好文 > 详细

009.面向对象之多态、封装、密封类、接口

时间:2017-01-20 20:43:30      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:using   nbsp   类对象   多态   自己   run   generic   传递   索引   

1.多态

定义:不同对象对于同一个方法(Cut)调用表现出不同行为
多态性主要是靠重写和隐藏来实现

a.(父类引用指向子类对象)
b.(父类类型做参数,传递子类对象)自定义方法参数是父类类型 传递的实参是子类对象
c.(父类类型作返回类型,return子类对象)自定义方法的返回类型是父类类型,return是类对象
注:都是把子类对象赋给父类类型

举例:

添加乐器类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 继承抽象类和装箱拆箱
{
public abstract class Instrument
{
public abstract void Play();
}
public class Piano : Instrument {

public override void Play()
{
Console.WriteLine("钢琴是用来弹的!");
}
}
public class Violin : Instrument {

public override void Play()
{
Console.WriteLine("小提琴是用来拉的!");
}
}

在Main中调用

Piano pno = new Piano();
pno.Play();
Violin vln = new Violin();
vln.Play();
Console.ReadKey();
Instrument isn = new Piano();
isn.Play();
Instrument vvv = new Violin();
vvv.Play();
Console.ReadKey();


2.密封类

sealed
密封类:不允许被继承
public sealed ClassName
{

}
密封类中不能定义抽象方法、虚方法
密封方法:不能在子类中重写
密封方法必须是重写的方法
override只能重写virtual abstract override的方法

访问修饰符 sealed override 返回类型 方法名(参数列表)
{
//方法体
}


练习:
定义vehicle类,plane类,bus类
bus plane继承自vehicle
定义各自的合适的属性、方法,bus、plane必须有自己的属性、方法
定义各自的构造函数
vehicle定义虚方法run,bus重写vehicle的虚方法run,plane隐藏vehicle的虚方法run
vehicle定义虚方法refuel,bus定义密封vehicle的refuel。

练习题代码:
新建类,实现题目要求

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Day03
{
public enum VehicleType
{
公共汽车,飞机
}
public class Vehicle
{
public VehicleType type;
public string brand;

public Vehicle(VehicleType type, string brand)
{
this.type = type;
this.brand = brand;
}
public Vehicle() { }

public virtual void Run()
{
Console.WriteLine("{0}在行驶",type);
}
public virtual void Refuel()
{
Console.WriteLine("{0}在加油",type);
}
}

public class Bus : Vehicle
{
public int lineNo;

public Bus(VehicleType type, string brand, int lineNo)
: base(type, brand)
{
this.lineNo = lineNo;
}
public Bus() { }

public override void Run()
{
Console.WriteLine("{0}按照规定的路线行驶",type);
}
public sealed override void Refuel()
{
Console.WriteLine("{0}加柴油",type);
}

public void PullIn()
{
Console.WriteLine("{0}路{1}进站",lineNo,type);
}
}

public class Plane : Vehicle
{
public string flightNo;//航班号

public Plane(VehicleType type, string brand, string flightNo)
: base(type, brand)
{
this.flightNo = flightNo;
}
public Plane() { }

public new void Run()
{
Console.WriteLine("{0}号航班正在飞行",flightNo);
}

public void Start()
{
Console.WriteLine("{0}号航班正在起飞", flightNo);
}
}
}

Main方法中调用:

实例化类
调用方法并赋上参数

代码省略...


3.封装
封装:隐藏属性、方法和方法的实现细节


4.接口interface

接口是用interface关键字定义的引用数据类型
接口是一套规范,可以约束类的行为
接口定义了一系列属性、事件和方法,但是不能有具体的实现
接口中不能有字段,可以包含方法、属性、事件、索引器
接口中的所有成员默认为public abstract,默认的 不可以写
接口中没有实现,有的仅仅是对方法的声明

对于接口来说 类是对接口的实现
类实现接口时,必须实现接口中的所有方法 加public
如果一个类继承父类的同时,有实现接口,父类在前,接口在后

public class SonClass:BaseClass,IMyInterface1,IMyInterface2
{

}

练习:

定义接口Istudy,包含Study()、Exam()方法;
定义接口Iplay,包含playgame()、trip();
定义类person,给一些合理的属性(姓名、年龄、性别)、构造函数
定义类student,继承自Istudy 、person、 Iplay,实现接口中的方法,方法中输出“某某学习”等信息

 

009.面向对象之多态、封装、密封类、接口

标签:using   nbsp   类对象   多态   自己   run   generic   传递   索引   

原文地址:http://www.cnblogs.com/harveylv/p/6323734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!