1 定义一个接口,定义一个int类型的属性和无参数的方法,在类里继承这个接口后,实现接口的属性和方法,把属性赋值给类里定义的一个字段。
2 定义一个虚方法,在继承虚方法的内容后,新增扩展功能。
3 定义一个抽象方法,在继承抽象方法的方法里重写。
4 定义一个密封方法,继承的类里,不能重写此方法。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//1 定义一个接口,定义一个int类型的属性和无参数的方法,在类里继承这个接口后,实现接口的属性和方法,把属性赋值给类里定义的一个字段。
//2 定义一个虚方法,在继承虚方法的内容后,新增扩展功能。
//3 定义一个抽象方法,在继承抽象方法的方法里重写。
//4 定义一个密封方法,继承的类里,不能重写此方法。
public interface UTInterface
{
//如下代码会报错,接口不允许定义字段,可以定义属性。
//public int _intData;
int intData
{
get;
set;
}
void UTIMethod();
}
public class SubDemo : Demo, UTInterface
{
public int _demoData;
private void Start()
{
UTVirtualMethod();
UTAbstractMethod();
Debug.Log($"intData = {intData}");
intData = 20;
Debug.Log($"_demoData = {_demoData}");
}
public override void UTVirtualMethod()
{
base.UTVirtualMethod();
Debug.Log("重写虚方法,SubDemo UTVirtualMethod");
}
public override void UTAbstractMethod()
{
Debug.Log("重写抽象方法,SubDemo UTAbstractMethod");
}
//密封方法使用需要继承一个父类的虚方法后使用,然后他的子类不能重写它。
public sealed override void UTSealedMethod()
{
}
//继承接口后,必须实现接口里的属性和方法
public int intData
{
get
{
return 10;
}
//调用intData = 20;,会运行set里的代码
set
{
_demoData = value;
}
}
}
public abstract class Demo : MonoBehaviour
{
//虚方法 - 父类可以实现部分具体功能,子类可以覆盖此方法完全重写功能或继承父类实现的部分功能后再扩展功能
public virtual void UTVirtualMethod()
{
Debug.Log("Demo类 UTVirtualMethod");
}
//抽象方法 - 抽象方法必须在抽象类里,抽象方法父类不能写具体代码,需要在子类覆盖时写具体功能
public abstract void UTAbstractMethod();
public virtual void UTSealedMethod() { }
public void UTIMethod()
{
Debug.Log("实现接口的方法");
}
}
public class SubSubDemo : SubDemo
{
private void Start()
{
UTAbstractMethod();
}
如下代码会报错,UTSealedMethod是密封的,不能重写
//public override void UTSealedMethod()
//{
// Debug.Log("重写密封方法,报错");
//}
public override void UTAbstractMethod()
{
Debug.Log("重写抽象方法,SubSubDemo UTAbstractMethod");
}
}