面向对象:封装继承和多态、接口

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,实现接口中的方法,方法中输出“某某学习”等信息

时间: 2024-10-05 05:08:15

面向对象:封装继承和多态、接口的相关文章

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)

Mysql数据库大量删除操作及谈面向对象中的封装继承和多态原理(图)最近进行数据库操作,遇到一个问题,就是大量删除一个数据表中的数据后,由于设定了id是自增的,导致再插入时,默认生成的id会很大,这个时候想要再次插入新的数据,应该怎么办呢?1.明确目前最后一个id的大小select id from tags order by id DESC limit 0,1; 假设返回的是9,则设置数据表从10开始自增 2.修改这个数据表从10开始自增alter table tags auto_increme

day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态

Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要以下几种类型: 3种基本序列类型(Basic Sequence Types):list.tuple.range 专门处理文本的附加序列类型(Text Sequence Types):str 专门处理二进制数据的附加序列类型(Binary Sequence Types): bytes.bytearray.mem

使用java中,面向对象封装+继承的方法算题

1.第一种:给定一行字符,逆序输出此字符串(空格.数字不输出),如"ab 23,(4 cd"输出"dc(,ba".(要求:使用面向对象封装+继承) class Bu { private String str; public Bu(){} public Bu(String str){ this.str = str; } public String getStr(){ return str; } public void setStr(String str){ this.

javascript面向对象:继承、多态

继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属性),同时可扩展自己的成员,下面介绍几种js中实现继承的方式: 1,对象模仿:通过动态的改变 this 指针的指向,实现对父类成员的重复定义,如下: function ClassA(paramColor) { this.color = paramColor; this.sayColor = function() { alert(this.color); } } function ClassB(paramColor,

面向对象(继承,多态)

二维数组的定义格式:第一种:直接给定了每一个一维数组中数组长度数据类型[][] 数组名称 = new 数据类型[m][n]第二种:给定了多少个一维数组,长度动态给定数据类型[][] 数组名称 = new 数据类型[m][] ;第三种:二维数组中直接给定元素值数据类型[][] 数组名称 = {{元素1,元素2},{元素1,元素2}-} 如何遍历二维数组 int [][] arr = {{11,22},{33,44},{55,66}} ; 外层循环:控制的是二维数组长度,内存循环,一维数组长度 代码

Java面向对象,继承,多态

1,继承 Java 中通过 extends 关键字可以继承一个类,implements可以继承多个接口.继承允许创建等级层次的类. 继承的机制提高了代码的复用性,让类与类之间产生了关系,有了这个关系,才有了多态的特性. 注:Java支持单继承,但是可以多层继承. 子类可以拥有父类的非private的方法和属性,子类可以继承父类的方法,也可以重写父类的方法,还可以对父进行拓展. 增加了类之间的联系,即提高了耦合. 一般格式为: class 父类 { } class 子类 extends 父类 {

php 面向对象之继承、多态和静态方法

<?php //继承:子类可以继承父类的一切 //特点:单继承 //父类 class Ren { public $name; public $sex; public $yuyan; function Say() { echo $this->name."正在讲话!"; } } //美国人的子类 class America extends Ren { public $ziben; //子类对父类的方法重写 function Say() { parent::Say(); //调用

Python 面向对象编程——继承和多态

1.1   继承和多态 1.1.1   继承 当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). >>> class Animal(object): ...    def run(self): ...        print('Animal is running...') #父类 ... >>> class Dog(Ani

面向对象(4)--继承和多态

一.继承 继承的类称为子类,被继承的类称为基类,父类,或超类. 继承的优点: 简化了代码 提高了代码的健壮性 提高了代码的安全性 多态的前提 缺点:耦合与内聚.耦合性越低,内聚性越高,代码越好. 比如,有一个Animal类,有个run方法: In [1]: class Animal: ...: def run(self): ...: print('我正在跑步!!!') ...: 当我们需要创建Dog和Cat类时,可以直接继承Animal: In [3]: class Dog(Animal): .