接口,抽象类,继承,多态,重写

1.抽象类

public abstract class AbstractPhone
{
public int Id { get; set; }
public string Name { get; set; }
/// <summary>
/// 子类有,但是内容各不相同的定义为抽次属性,只能在抽象类中使用
///也可以用virtual实现,子类重写该方法(但是父类如果用virtual实现的话,必须定义为方法,
///有实现,但是在当前类中没有意义类中)
/// </summary>
public abstract void System();
public virtual void Text()
{
Console.WriteLine("basePhone");
}
}

2.接口

/// <summary>
/// 接口:就是一个约束
/// 接口中只能包含:属性,没有方法体的方法,事件,索引器
/// </summary>
public interface IExtend
{

//string Remark;//字段不能有,报错
//delegate void DoWork();//委托不行,会报错
//构造函数不行
//class Test { }//类种类不行
void Phone();//接口默认是public的,不允许修饰,不能有方法体
string Remark { get; set; }//属性可以有
event Action OpenDoorHandler;//事件可以
int this[int index] { get; set; }//索引器可以
}

3.继承

public class Iphone:AbstractPhone,IExtend
{
public override void System()
{
Console.WriteLine("IOS");
}
public void Phone()
{
Console.WriteLine("Iphone phote");
}
}

public class P10: AbstractPhone, IExtend
{

public event Action OpenDoorHandler;

public override void System()
{
Console.WriteLine("Andriod");

}
public void Phone()
{
Console.WriteLine("Iphone phote");
}
}

IPhone和P10都继承AbstractPhone,但是抽象方法System的实现逻辑不同,这就是多态,实现抽象方法需要重写父类的方法

4.面向抽象

public class Student
{
/// <summary>
/// 面向抽象:
/// 1. 一个方法可以满足多个类型的诉求
/// 2. 支持扩展,对扩展开放,对修改关闭,增加任何一个手机类型,都不用修改此方法都可以用
/// </summary>
public void Play(AbstractPhone phone)
{
Console.WriteLine(phone.Id + "" + phone.Name);
}
/// <summary>
/// 与上面的Play方法相同
/// </summary>
public void Play<T>(T phone) where T : AbstractPhone
{
Console.WriteLine(phone.Id + "" + phone.Name);
}
}

5.

class Program
{
/// <summary>
/// 抽象类:代码重用+约束
/// 抽象方法:约束,就是继承的子类必须有这个方法,但是怎么实现由自己定
/// 封装,继承,多态,重写
/// 什么情况下用抽象类?什么情况下用接口?
/// 接口抽象类:面向抽象编程,可以做到开闭原则(对扩展开放,对修改关闭),搭建框架时,追求扩展性的时候,就会用上

// 抽象类:代码重用+约束 单继承 类 ->(因为是类,所以不能跨产品)

/// 接口:约束 多继承 相当于扩展方法类 ->可以跨产品
/// 大多数情况下用接口,有代码重用的情况下用抽象类

/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
AbstractPhone ap = new Iphone();//抽象类中有未实现的方法,所以不能直接实例化,可以用子类来实例化。
//ap只能调用抽象类约束的方法,ap在运行时是由Phone()方法的,但是编译时报错,
//是因为在编译的时候,编译器会根据变量的类型决定该类型有没有该方法,
//可以绕开编译器调用,用dynamic可以避开编译器
dynamic dphone = ap;
dphone.Phone();
ap.System();//ios
AbstractPhone P = new P10();//抽象类中有未实现的方法,所以不能直接实例化,可以用子类来实例化。
P.System();//adriod
IExtend t = new Iphone();//t只能调用接口约束的方法
t.Phone();//只能调用实现的接口方法
IExtend t1 = new P10();
t1.Phone();
//面向抽象
Student s = new Student();
Iphone iphone = new Iphone();
P10 p10 = new P10();
s.Play(iphone);
s.Play(p10);
Console.ReadLine();//多态:子类继承父类,重写父类的方法,就是多态(重写逻辑各不相同)

}

原文地址:https://www.cnblogs.com/fblogs/p/12104978.html

时间: 2024-11-25 01:11:50

接口,抽象类,继承,多态,重写的相关文章

Java自学-接口与继承 多态

Java的多态 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父类引用指向子类对象 示例 1 : 操作符的多态 同一个操作符在不同情境下,具备不同的作用 如果+号两侧都是整型,那么+代表 数字相加 如果+号两侧,任意一个是字符串,那么+代表字符串连接 package charactor; public class Hero { public String name; protected float hp; public static void main(String[] ar

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

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

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

java----基础(this,继承,多态,抽象类,接口)

this指针 this指针在类定义时用到,this属于用类实例化的对象,只能在定义类的时候使用:(在下面的代码中会有体现) 类变量&类方法 定义: 访问修饰符 static+数据类型+变量名 所有该类的对象均可访问,均可修改,不会在调用后初始化,相当于全局变量. 可以被所有对象访问到,并且可以通过类访问到  类名.类变量 静态方法 == 类方法 可以被类名和对象访问到 原则上类变量用类方法来访问 类方法中不能访问非类变量,类变量可以被非类方法访问. 四种访问控制符: public : 对外公开

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

封装,继承,多态,接口

封装 封装的概述和好处: 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 成员变量private,提供对应的getXxx()/setXxx()方法 好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 public class Student { String name; //int age

一个接口能否继承另一个接口?一个抽象类能否实现一个接口?

都可以: 一.一个接口能否继承另一个接口? 接口继承接口  本质就是一个抽象类继承另一个抽象类(它们都没写方法的实例).当一个类继承了一个抽象类,它必须要重写父类 抽象类中的抽象方法,如果不去重写父类抽象方法的实例,那么这个类也是抽象类(这个抽象子类,直到重写这个抽象方法的实例为止, 才能摆脱抽象的命运).其实我们想想,一个类去实现一个接口也不就是一个实体子类把一个抽象的所以抽象方法实例化(重写了 抽象父类 中全部抽象方法),当然抽象类和接口还是有区别的.我上上篇就写到了抽象类和接口的区别,有兴

接口、接口优点、接口的属性和方法特性、接口与继承的区别、接口与抽象类的区别、匿名实现类、JDK1.8新特性、打印类名称

接口里的属性,必须是公共的/默认的&静态的&Final&初始化后的属性: 接口里所有方法都是抽象的. 接口和继承---先天有的用继承,后天学习的用接口: 接口特性-------- 1.接口不可以被实例化: 2.实现类必须实现接口中所有方法,否则实现类必须是抽象类 3.实现类可以实现多个接口,来弥补Java不能多继承: 4.接口中的变量都是静态常量:(静态的-可以通过类的名字点-直接调用:) ----------------------------------------------

接口、继承、多态

接口.继承.多态 继承和多态是面向对象开发语言中非常重要的饿一个环节,如果在程序中使用继承和多态得当,整个程序的架构将变得非常有弹性,通知书可以减少代码的冗余性. 继承机制的使用可以复用一些定义好的类,减少重复代码的编写.多态机制的使用可以动态调整对象的调用,降低对象之间的依存关系. 1.继承机制中子类的结构化过程 子类的所构造函数,默认都会访问谷类中控参数的构造函数:因为,子类每一个构造行数内的第一行都由依据隐式的super(); 子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,

重载,继承,重写和多态的区别

重载,继承,重写和多态的区别 重载,继承,重写和多态的区别: 1)继承是子类获得父类的成员, 2)重写是继承后重新实现父类的方法. 3)重载是在一个类里一系列参数不同名字相同的方法. 4)多态则是为了避免在父类里大量重载引起代码臃肿且难于维护. 网上看到一个有趣的说法是:继承是子类使用父类的方法,而多态则是父类使用子类的方法. 下面的例子包含了这四种实现: class Triangle extends Shape { public int getSides() {  return 3; }} c