抽象类的特点,在面对对象编程中抽象类的特点什么?
抽象类的特点,在面对对象编程中抽象类的特点什么?详细介绍
本文目录一览: 抽象类的特点是什么?
专业解答:抽象类不能实例化。抽象类中可以没有,可以有一各或多个抽象方法,甚至可以全部方· 法都是抽象方法。
1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封。
抽象类就是在类名前加了修饰符abstract。如果这个类有方法是抽象方法也就是此方法使用abstract修饰的,那么此类就是抽象类。抽象方法没有方法主体,就是没有大括号,直接在小括号后面加分号。如:
public abstract void sayHello();
就是抽象方法。
抽象类就是为了让子类继承的,它表示从一些具体类中抽象出来的类型。
抽象类就是在类名和方法前必须加了修饰符abstract,这个方法是不具体的没有实现的,因为方法他是抽象的你不知道他要做什么,那么这个方法在这有什么用呢,这就需要一个满足is a关系的类来继承这个抽象类了,继承了有什么用呢,那么他就继承父类的非私有的成员方法和成员变量了,当然方法你继承的是抽象的,如果你对现在的对明确了,你就可以在这个子类重写父类方法,多个子类就可以有多个行为,如动物类是人类有一个方法
动物叫声的类,动物有很多,你不知道他是具体那种动物叫声,那么他就是不具体的,你就可以这样
Public abstract vid work()
他有一个子类 狗类
Public void work(0
{
System.out.prinln("汪汪汪");//重写父类方法
}
Public abstract vid work()
他有一个子类 猫类
Public void work(
{
System.out.prinln("喵喵喵");//重写父类方法
}
是不是就形成了多态了?
1、抽象类不能实例化。
2、抽象类可以包含抽象方法和抽象访问器。
3、不能用 sealed 修饰符修饰抽象类,因为这两个修饰符的含义是相反的。 采用 sealed 修饰符的类无法继承,而 abstract 修饰符要求对类进行继承。
4、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。
扩展资料
抽象类与其他类的比较
一、与具体类比较
1、抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封。
二、与接口比较
抽象类表示该类中可能已经有一些方法的具体定义,但是接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
参考资料来源:百度百科-抽象类
抽象类的概念和特点
抽象类的概念:
抽象类是一种特殊的类,它不能被实例化,可以用来定义一些抽象的方法和属性。抽象方法是一种没有实现的方法,只有定义,需要在子类中被实现。在Java中,抽象类用abstract关键字来修饰,抽象方法同样使用abstract关键字来修饰。抽象类可以包含非抽象方法和属性,但至少要有一个抽象方法。
抽象类的特点有以下几点:
1、抽象类不能被实例化,只能被继承。
2、象类可以包含抽象方法和非抽象方法。
3、抽象方法只有声明,没有实现。
4、抽象方法必须被子类实现。
5、抽象类可以被用来定义一些通用的方法和属性,让子类继承并实现它们。
抽象类的注意事项:
1、抽象类不能被实例化。
2、抽象类可以包含非抽象方法和属性。
3、如果一个类继承了一个抽象类,那么它必须实现父类中的所有抽象方法,否则它也必须声明为抽象类。
4、在子类中实现抽象方法时需要使用@Override注解。
5、抽象类可以被用来定义一些通用的方法和属性,让子类继承并实现
在面对对象编程中抽象类的特点什么?
抽象类的特点:
1、抽象类的方法可以是抽象的,也可以是不抽象的。
2、抽象类的方法可以全是抽象的,也可以全是不抽象的。
3、有抽象方法的类必须是抽象类,或者是接口(但是接口的方法定义必须是public static abstract 修饰)。
4、子类继承抽象类,必须实现抽象类的所有抽象方法。
5、抽象类不能被实例化,没有构造函数。
6、子类中的抽象方法不能与父类的抽象方法同名。
7、抽象类的默认属性修饰符是public abstract。
8、抽象类的属性不能定义成静态的。
9、如果抽象类的抽象方法不被重写,那么子类也必须是抽象类。
何时必须声明一个类为抽象类?
当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。
抽象类的特点:
抽象类使用abstract修饰符,并且它只能是用作基类。
抽象类不能实例化,当使用new运算符对其实例时会出现编译错误。
允许(但不要求)抽象类包含抽象成员。(非抽象类不能包括抽象成员)
抽象类不能被密封。
扩展资料
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象方法只存在于抽象类中。抽象类的作用:继承的体系。抽象类强制其子类重写父类方法,例如:定义一个抽象员工类,员工类中定义了一个抽象方法叫工作。那么继承员工类的子类也必须工作,否则就会编译失败。
参考资料来源:
百度百科——抽象类
在JAVA中什么是抽象类,它有什么特点?
由关键字abstract修饰 抽象类不能被实例化,一般抽象类是用来继承的!
有abstract关键字修饰的类为抽象类
格式:
abstract class 类名 {}
特点:
1.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
2.抽象类不能实例化
3.那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类:
1.要么是抽象类
2.要么重写抽象类中的所有抽象方法
C#接口和抽象类技术特点浅析
一 C#抽象类
C#抽象类是特殊的类 只是不能被实例化 除此以外 具有类的其他特性 重要的是抽象类可以包括抽象方法 这是普通类所不能的 抽象方法只能声明于抽象类中 且不包含任何实现 派生类必须覆盖它们 另外 C#抽象类可以派生自一个抽象类 可以覆盖基类的抽象方法也可以不覆盖 如果不覆盖 则其派生类必须覆盖它们
二 C#接口
C#接口是引用类型的 类似于类 和抽象类的相似之处有三点
不能实例化
包含未实现的方法声明
派生类必须实现未实现的方法 抽象类是抽象方法 接口则是所有成员(不仅是方法包括其他成员)
另外 C#接口有如下特性
接口除了可以包含方法之外 还可以包含属性 索引器 事件 而且这些成员都被定义为公有的 除此之外 不能包含任何其他的成员 例如 常量 域 构造函数 析构函数 静态成员 一个类可以直接继承多个接口 但只能直接继承一个类(包括抽象类)
三 C#抽象类和接口的区别
类是对对象的抽象 可以把抽象类理解为把类当作对象 抽象成的类叫做抽象类 而接口只是一个行为的规范或规定 微软的自定义接口总是后带able字段 证明其是表述一类类 我能做 抽象类更多的是定义在一系列紧密相关的类间 而接口大多数是关系疏松但都实现某一功能的类中
接口基本上不具备继承的任何具体特点 它仅仅承诺了能够调用的方法; 一个类一次可以实现若干个接口 但是只能扩展一个父类 接口可以用于支持回调 而继承并不具备这个特点 抽象类不能被密封 抽象类实现的具体方法默认为虚的 但实现接口的类中的接口方法却默认为非虚的 当然您也可以声明为虚的
(接口)与非抽象类类似 抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现 但是 允许抽象类将接口方法映射到抽象方法上 抽象类实现了oop中的一个原则 把可变的与不可变的分离 抽象类和接口就是定义为不可变的 而把可变的座位子类去实现 好的接口定义应该是具有专一功能性的 而不是多功能的 否则造成接口污染 如果一个类只是实现了这个接口的中一个功能 而不得不去实现接口中的其他方法 就叫接口污染
尽量避免使用继承来实现组建功能 而是使用黑箱复用 即对象组合 因为继承的层次增多 造成最直接的后果就是当你调用这个类群中某一类 就必须把他们全部加载到栈中!后果可想而知 (结合堆栈原理理解) 同时 有心的朋友可以留意到微软在构建一个类时 很多时候用到了对象组合的方法 比如中 Page类 有Server Request等属性 但其实他们都是某个类的对象 使用Page类的这个对象来调用另外的类的方法和属性 这个是非常基本的一个设计原则 如果抽象类实现接口 则可以把接口中方法映射到抽象类中作为抽象方法而不必实现
而在抽象类的子类中实现接口中方法 四 抽象类和接口的使用
如果预计要创建组件的多个版本 则创建抽象类 抽象类提供简单的方法来控制组件版本
如果创建的功能将在大范围的全异对象间使用 则使用接口 如果要设计小而简练的功能块 则使用接口
lishixinzhi/Article/program/net/201311/13371
在C#中,类的多态与抽象类区别在哪里
类的多态主要表现在类的继承。
通过继承,一个类可以用作多种类型:
可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C#
中的每种类型都是多态的。类型可用作它们自己的类型或用作
Object
实例,因为任何类型都自动将
Object
当作基类型。
多态性不仅对派生类很重要,对基类也很重要。任何情况下,使用基类实际上都可能是在使用已强制转换为基类类型的派生类对象。基类的设计者可以预测到其基类中可能会在派生类中发生更改的方面。
抽象类的特点:
不能直接被实例化;
抽象类中必定包含抽象成员;
抽象类不能被密封;
一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。
抽象类主要用作对象系列的基类,共享某些主要特性,例如共同的目的和结构。
什么是.net的接口和抽象类
接口特点:
接口是一种规范。也是一种能力。只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员
接口的功能要单一
为了多态。 接口不能被实例化。也就是说,接口不能new(不能创建对象)跟抽象类是一样的,因为创建对象也没意义。
接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。类中的成员默认的访问修饰符是private ,而接口中默认的访问修饰符是public
(默认为public) 接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)。
接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。
接口与接口之间可以继承
接口并不能去继承一个类,而类可以继承接口 (接口只能继承于接口,而类既可以继承接口,也可以继承类)
实现接口的子类必须实现该接口的全部成员。
一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并实现了接口IA,那么语法上A必须写在IA的前面。
class MyClass:A,IA{},因为类是单继承的。
显示实现接口的目的:解决方法的重名问题什么时候显示的去实现接口:当继承的接口中的方法和参数一摸一样的时候,就要显示的去实现接口
当一个抽象类实现接口的时候,需要子类去实现接口。
接口具体详情看CSDN博客网页链接::网页链接
抽象类特点:
======抽象类特点:
1.抽象成员必须标记为abstract,并且不能有任何实现。2.抽象成员必须在抽象类中。3.抽象类不能被实例化
4.子类继承抽象类后,必须把父类中的所有抽象成员都重写。(除非子类也是一个抽象类,则可以不重写)
5.抽象成员的访问修饰符不能是private
6.在抽象类中可以包含实例成员。并且抽象类的实例成员可以不被子类实现
7.抽象类是有构造函数的。虽然不能被实例化。
8、如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。
如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候 也必须要传入返回值。
======抽象类应用场景:如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
抽象类具体详细看CSDN博客:网页链接
一、抽象类:抽象类说白了就是对类的抽象,它通常代表一个抽象的概念,并提供一个集成的出发点,当设计新的抽象类时,一定是用来继承的,所以,在一个继承关系形成的等级结构里面,树叶节点应当是具体类,树枝节点应该是抽象类。
抽象类的特点
(1)抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法。(2) 抽象类不能被实例化。(3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类。(4) 具体派生类必须覆盖基类的抽象方法。(5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。
public abstract class Animal
{
//抽象类的属性
private int age;
private string sex;
public int Age
{
get { return age; }
set { age = value; }
}
//抽象类包含虚方法
public virtual int GetAge()
{
return age;
}
//抽象类中可以包含普通方法
public void setAge(string sex)
{
this.sex = sex;
}
//抽象类中还可以包含抽象的方法
public abstract void Run();
}
public class Cat : Animal
{
//Cat 类继承抽象类Animal 并将Run方法重写
public override void Run()
{
throw new NotImplementedException();
}
}
二、接口
定义:接口是把隐式公共方法和属性组合起来,一封装特定功能的集合。
一旦类实现了接口,类就可以支持接口所指定的所有属性和成员,声明接口在语法上与声明抽象类相同,但不允许提供接口中任何成员的执行方式。
接口的特点:
(1)接口不能被实例化。
(2) 接口只能包含方法声明。
(3) 接口的成员包括方法、属性、索引器、事件,并且在具体类中完全实现。
(4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。
例子
public interface Animal1
{
string Name(string name);
void Run();
}
class Dog : Animal1
{
public void Run()
{
Console.WriteLine("50km/h");
}
public string Name(string name)
{
return name;
}
}
接口vs抽象类
相同点:
(1) 都可以被继承。
(2) 都不能被实例化。
(3) 都可以包含方法声明。
(4) 派生类必须实现未实现的方法。
区 别:
(1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
(2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。
(3) 接口可以被多重实现,抽象类只能被单一继承。
(4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中。
(5) 抽象类是从一系列相关对象中抽象出来的概念,因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性。
(6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法, 接口可以用于支持回调,而继承并不具备这个特点。(7)抽象类中的抽象成员可以被子类部分实现,而接口必须全部实现。(8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的。
三、比喻
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。2.就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。
四、小结
从根本上来说,抽象是从子类中发现了公共的东西,泛化出父类,然后让子类去继承父类,是自下向上产生的,而接口是根本根本不用知道子类的存在,方法如何实现还不知道,只是预先定义好某个功能罢了!以上是我对接口和抽象类的简单理解,欢迎朋友们来斧正。
php中抽象类和接口有哪些不同点
抽象类与接口的相同点:(推荐视频:java视频教程)1、都是用于声明某一种事物,规范名称、参数,形成模块,未有详细的实现细节。2、都是通过类来实现相关的细节工作3、语法上,抽象类的抽象方法与接口一样,不能有方法体,即{}符号4、都可以用继承,接口可以继承接口形成新的接口,抽象类可以继承抽象类从而形成新的抽象类抽象类与接口的不同点:1、抽象类可以有属性、普通方法、抽象方法,但接口不能有属性、普通方法、可以有常量2、抽象类内未必有抽象方法,但接口内一定会有“抽象”方法3、语法上有不同4、抽象类用abstract关键字在类前声明,且有class声明为类,接口是用interface来声明,但不能用class来声明,因为接口不是类。5、抽象类的抽象方法一定要用abstract来声明,而接口则不需要6、抽象类是用extends关键字让子类继承父类后,在子类实现详细的抽象方法。而接口则是用implements让普通类在类里实现接口的详细方法,且接口可以一次性实现多个方法,用逗号分开各个接口就可二者各自的特点:抽象类内未必有抽象方法,但有抽象方法的类,则必是抽象类抽象类内,即便全是具体方法,也不能够实例化,只要新建类来继承后,实例继承类才可以接口可以让一个类一次性实现多个不同的方法接口本身就是抽象的,但注意不是抽象类,因为接口不是类,只是其方法是抽象的。所以,其也是抽象的。