问个java关于抽象类基础的问题?抽象类不是不能实例化吗?怎么还能通过上转型创建抽象类对象?

问个java关于抽象类基础的问题?抽象类不是不能实例化吗?怎么还能通过上转型创建抽象类对象?

flower是抽象类,Rose继承与flower
但为什么下面这样写是合法的,不是抽象类不能被实例化对象吗?
Flower flower = new Rose()
flower.bloom();

2个回答

我需要和你说的是,编程语言不要学得那么“累”,编程语言并不是你们学校的教学Java/C++的老师发明的。然而你们的老师的出发点就是编出各种概念和考题刁难学生。
而实际上,Sun公司(现在被Oracle公司收购了)设计Java只是为了方便人们编写程序,编程语言也是一种产品,它需要迎合程序员,而不是刁难程序员,否则那么多语言,它怎么有市场?
所以编程语言学习根本没有那么多概念,也不用那么累。你的整个思维方式需要扭转。
什么“上转型”“实例化”对你来说不重要。就好比开汽车完全不用理解正时皮带,使用冰箱完全不用搞明白什么是压缩机。你需要知道编程语言的每个特性是干嘛用的,就可以了。

继承是干嘛用的呢?你们老师肯定告诉你一堆,说来说去,继承就是为了考试做题用的!你可以把老师说的屁话忘记掉了。

继承在现实编程中的作用是,类库的开发者定义好程序的骨架,而应用的开发者通过重写具体的方法,来自定义/改变程序的细节。就是这么简单。
具体来说,就是类库的开发者的代码已经考虑到了某个类的结构,并且试图调用它的方法。但是具体这个类的方法怎么写,这个不确定,要留给应用开发者自己去定义或者改变。那么类库的开发者先定义好基类,并且把程序写出来(注意,这里类库的开发者只能使用基类类型)。
而应用的开发者派生或者实现这个类,得到派生类,在派生类里写自己的代码,并且把派生类的对象传给类库。类库可以“一视同仁”地按照基类的方式调用。
比如说,类库的作者编写了一个排序算法(比如Java的list的sort(comparer)方法,它需要一个比较器参数),为什么需要比较器?因为算法的框架是确定的,比如用冒泡排序算法,都要有两个循环、比较、交换、把小的放前面,大的放后面这些操作。但是具体来说,怎么定义谁大谁小(或者说按照什么条件排序,是按照身高、年龄还是成绩?这个萝卜青菜,各有所爱,不能写死),需要留给应用的程序员自定义。
那么类库调用comparer基类的compareTo方法去比较。
而如果你要按照成绩排序,你作为应用的开发者就派生一个comparer的子类,比如叫做mycomparer,给你两个人,你按照成绩比较,返回谁大谁小,那么Java类库就能排序了,排序不需要你自己写了。

那么你说,基类需要将你的mycomparer视作comparer基类,并且调用compareTo是不是很自然的事情。换句话说,如果mycomparer不能转换为comparer,那么类库如何让应用开发者自定义排序规则,那还不是得为了每个排序规则重复写一个算法?这就好比一个不能制冷的冰箱,不是一样的么?

Rose()不是抽象类,所以可以new
new才是“实例化”
=类型,这个不是。

如果派生类不能转换为抽象类类型,那么我问你,为什么要继承?
就好比我们不管电冰箱如何制冷,我就问你一个简单的问题,如果冰箱不能制冷,你为什么要用电冰箱?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
抽象类不是不能实例化吗?
InputStream in = this.getClass().getClassLoader().getResourceAsStream();rn这个式子合法吗?右边看了下是返回类型是InputStream,但是InputStream是抽象类啊,这样赋值给in可以吗?求大神解答~
关于抽象类不能实例化的问题
抽象类不能实例化;当遇见这种错误,先查看是哪个类导致的该错误;查看该类的继承关系;可以从最新添加的继承关系查起;找到纯虚函数即可;将纯虚函数在该类中重定义即可解决;结合我的错误时,父类中有纯虚函数:virutal void statuschanged (int status)=0;我在类中重新申明:void statuschanged(const int status);在cpp文件中定义:voi...
Stream类不是抽象类吗?怎么还能实例化?
我在C#程序设计中看到的:rnStream inputStream = File.OpenRead(@"c:\test.cs");rn但是Stream类不是抽象类吗?不是只能派生而不到实例化的吗?rn谁给解释一下?
抽象类不能进行实例化吗?
抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。
抽象类和接口不能实例化吗?
书上说抽象类和接中不能用new实例化,但是ActionListener是接口,WindowAdapter是抽象类,在很多事件处理时都用到了new,这是怎么回事?
java抽象类实例化问题
我写了一个AbstractClass的抽象类,如下所示:![图片说明](https://img-ask.csdn.net/upload/201507/31/1438301075_337808.png)n之后写了这样的代码:n![图片说明](https://img-ask.csdn.net/upload/201507/31/1438301147_673119.png)n运行结果是这样的:n![图片说明](https://img-ask.csdn.net/upload/201507/31/1438301207_10821.png)n不是说java的抽象类不能被实例化吗?这是什么意思?希望各位能够解答一下这个问题。n
关于抽象类实例化的问题?
public abstract class Arn public abstract B();//抽象方法Brnrnrnpublic class C extends A//继承父类Arn public B()rn //实现B的方法rn rnrnrnpublic class crn A user;rn user.b();rnrn类A 是一个抽象类,不能被实例化,而在类C中user是否被实例化了,迷惑!!!
不能实例化抽象类?
我在类中需要用到std::list定义一个成员,rntype只是个基类,这该如何实现?rn
“CException”: 不能实例化抽象类
e:\vc\bitmap\bitmap\cdib.cpp(471) : error C2259: “CException”: 不能实例化抽象类rn 由于下列成员:rn “CException::~CException(void)”: 是抽象的rn c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(743) : 参见“CException::~CException”的声明rnrn该要怎么改正啊?谢谢啦
不能实例化抽象类
有两个类,一个PrinterMonitor抽象类,一个MyPrinterMonitor具体类。在实例化的时候,告诉我不能实例化抽象类。现在正在学设计模式,如果C++不能实例化抽象类那要怎么实现所期望的功能呢?rn我找了一些资料,里面的代码也是这么写的,但我的编译为什么出错?rn代码如下:rnrn//PrinterMonitor.h文件rn#include "Printer.h"rn#include"ChargeFormStrategy.h"rn#include"Filter.h"rn#include"Printer.h"rn/**rn * 打印机监视器抽象类rn */rnclass PrinterMonitorrnrnrnpublic:rn ~PrinterMonitor();rn virtual void startMonitor() =0;rn rn virtual void monitor() =0;rn virtual Printer getPrinter() =0;rnprotected:rn PrinterMonitor();rnprivate:rnrn Printer printer;rn ChargeFormStrategy chargeFormStrategy;rnrn Filter filter;rnrn;rn#endifrnrnrn//MyPrinterMonitor.h文件rnrn///////////////////////////////////////////////////////////rn// MyPrinterMonitor.hrn// Implementation of the Class MyPrinterMonitorrn// Created on: 20-二月-2014 15:36:11rn// Original author: Administratorrn///////////////////////////////////////////////////////////rnrn#if !defined(EA_B1612F76_2F98_4fa4_A5C6_B3B703B4379C__INCLUDED_)rn#define EA_B1612F76_2F98_4fa4_A5C6_B3B703B4379C__INCLUDED_rnrn#include "PrinterMonitor.h"rnrnclass MyPrinterMonitor : public PrinterMonitorrnrnrnpublic:rn virtual ~MyPrinterMonitor();rnrn MyPrinterMonitor();rn void startMonitor();rnprivate:rnrn void monitor();;rn#endif rnrn//测试rnint main()rn PrinterMonitor* myPtMonitor;rnrnrn //此报错:error C2259: “MyPrinterMonitor”: 不能实例化抽象类rn myPtMonitor= new MyPrinterMonitor();rn rnrnreturn 0;rnrn
"CAlarmMessage":不能实例化抽象类
[code=C/C++]////////////////////1 AlarmMessage.hrnclass CAlarmMessage : public CAlarmReceiverrnrnpublic:rn CAlarmMessage();rn ~CAlarmMessage(void);rnrnpublic:rn virtual void NetDisConnect( LONG lLoginID, DWORD dwUser); //网络断线rn virtual int RecogATMDataCallback(); //回调函数rnrnrn/////////////////2 AlarmMessage.cpprnCAlarmMessage::CAlarmMessage()rnrnrnrnCAlarmMessage::~CAlarmMessage(void)rnrnrnrn//回调函数rnint CAlarmMessage::RecogATMDataCallback()rnrn //具体实现rn return 0 ;rnrnrn/////////////////3 My.cpprn#include "My.h"rn#include "AlarmMessage.h"rnrnchar *m_img ;rnint m_imgLen ;rnCAlarmMessage *m_pAlarmmsg = NULL;rnrn//函数rnlong Init()rn rn USES_CONVERSION;rn m_pAlarmmsg = new CAlarmMessage() ; //错误“CAlarmMessage”: 不能实例化抽象类rn //为什么这里会出现这种报错呢?rn m_img = (char*)malloc( 500 * 1024 ) ; //分配空间以存放图片rn m_imgLen = 0 ;rnrn return 1;rn[/code]
不能实例化抽象类什么意思
IMPLEMENT_DYNCREATE(COrderView, CRecordView)rn问题的代码rnrnH文件rn[code=C/C++]#pragma oncernrnclass COrderSet;rnclass CDBSampleDoc;rnrnclass COrderView:public CRecordViewrnrn DECLARE_DYNCREATE(COrderView)rnrnprotected:rn virtual ~COrderView()rn virtual void DoDataExchange(CDataExchange* pDX);rn virtual void OnInitialUpdate();rnrnpublic:rn enum IDD = IDD_ORDERS_FORM ;rn COrderSet* m_pSet;rnrn CDBSampleDoc* GetDocument() constrn rn return reinterpret_cast(m_pDocument);rn rn COrderSet* GetRecordSet();rn COrderView();rnrn#ifdef _DEBUGrn virtual void AssertValid() const;rn virtual void Dump(CDumpContext& dc) const;rn#endifrn;[/code]rnrnCPP文件rn[code=C/C++]#include "stdafx.h"rn#include "DBSample.h"rnrn#include "OrderSet.h"rn#include "DBSampleDoc.h"rn#include "OrderView.h"rnrnIMPLEMENT_DYNCREATE(COrderView, CRecordView)rnrnCOrderView::COrderView()rn : CRecordView(COrderView::IDD),m_pSet(NULL)rnrn rn // TODO: 在此处添加构造代码rnrnrnrnvoid COrderView::DoDataExchange(CDataExchange* pDX)rnrn CRecordView::DoDataExchange(pDX);rn // 可以在此处插入 DDX_Field* 函数以将控件“连接”到数据库字段,例如rn // DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);rn // DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);rn // 有关更多信息,请参阅 MSDN 和 ODBC 示例rn DDX_FieldText(pDX,IDC_ORDERID,m_pSet ->m_OrderDetailsOrderID,m_pSet);rn DDX_FieldText(pDX,IDC_CUSTOMERID,m_pSet ->m_OrdersCustomerID,m_pSet);rn DDX_FieldText(pDX,IDC_PRODUCTID,m_pSet ->m_OrderDetailsProductID,m_pSet);rn DDX_FieldText(pDX,IDC_QUANTITY,m_pSet ->m_OrderDetailsQuantity,m_pSet);rn rnrnrnrn#ifdef _DEBUGrnvoid COrderView::AssertValid() constrnrn CRecordView::AssertValid();rnrnrnvoid COrderView::Dump(CDumpContext& dc) constrnrn CRecordView::Dump(dc);rnrn#endifrnrnCOrderset* COrderView::GetRecordset()rnrn ASSERT(m_pSet != NULL);rn return m_pSet;rnrnrnCRecordset* COrderView::OnGetRecordset()rnrn return m_pSet;rn[/code]
vc 不能实例化抽象类?
CDataBaseStoreLog 继承自抽象类 CStoreLog,里面实现了抽象方法 writelog 创建对象CDataBaseStoreLog dbfile;时提示不能实例化抽象类是怎么回事?
抽象类不能被实例化
  /** * */ package test919; public abstract class Animal { private String name; public Animal(String name) { super(); this.name = name; } public abstract void enjoy(); } package t...
【Debug】不能实例化抽象类
A类继承于B类(抽象类,只有接口),但是没有对B类的接口进行实现,就会提示:不能实例化抽象类。 比如下面的代码: // class IEventParser { virtual void processEvent(int type, std::string json) = 0; virtual void processEvent(int type, std::string json, vo
不是抽象类却一直提示不能实例化抽象类
[code=c]//应用程序类rnclass CGameClient : public CGameFramernrn rnpublic: rn CGameClientApp();rn virtual ~CGameClientApp();rnpublic:rn //创建主窗口rnvirtual CGameFrameDlg * GetGameFrameDlg() rnrn return new CGameClientDlg; //: error C2259: “CGameClientDlg” : 不能实例化抽象类rnrn rnrnrn;rnrnCGameClientDlg构造函数我有实现:rnCGameClientDlg::CGameClientDlg() : CGameFrameDlg(&m_GameClientView)rnrn int i= i;rnrn return;rnrn[/code]rn问题是我在另一个工程中这样用的话就没问题,不知道到底是哪儿出了问题rn
抽象类可以实例化吗?
抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象~ ...
抽象类不能实例化的问题求助
抽象类不能实例化,也就是不能直接new来调用构造器。rn我们知道不能new WindowAdapter(),但是为什么new WindowAdapter() 这样就可以呢??例如:rnaddWindowListener(new WindowAdapter()rn public void windowActivated(WindowEvent e)rn text.append("\n我被激活");rn rn public void windowClosing(WindowEvent e)rn System.exit(0);rn rn请解释为什么编译器中new WindowAdapter后加一个就可以了?
不能实例化抽象类c++问题
#ifndef QUERYn#define QUERYn#include "TextQuery.h"nclass Query_basenn friend class Query;nprotected:n typedef TextQuery::line_no line_no;n virtual ~Query_base()nprivate:n virtual set eval(const TextQuery&)const=0;n virtual ostream& display(ostream& =cout)const=0;n;nclass Querynnprivate:n friend Query operator~(const Query &);n friend Query operator&(const Query &,const Query&);n friend Query operator|(const Query &,const Query&);n Query_base *q;n size_t *use;n void decr_use()n n if(--*use==0)n delete q;delete use;n n Query(Query_base* query):q(query),use(new size_t(1))npublic:n Query(const string &);n Query(const Query &rhs)n n n q=rhs.q;n use=rhs.use;n ++*use;n n Query& operator=(const Query& rhs)n n decr_use();n q=rhs.q;n use=rhs.use;n ++*use;n return *this;n n ~Query()n n decr_use();n n set eval(const TextQuery &t)constn n return q->eval(t);n n ostream& display(ostream &os)constn n return q->display(os);n n;nostream& operator<<(ostream &os,const Query& query)nn return query.display(os);nnclass WordQuery:public Query_basennprivate:n friend class Query;n WordQuery(const string &s):query_word(s)n string query_word;n ostream& display(ostream &os)constn n return os< eval(const TextQuery &t)constn n return t.run_query(query_word);n n;nQuery::Query(const string &s)nn q=new WordQuery(s);n use=new size_t(1);nnclass NotQuery:public Query_basennprivate:n friend Query operator~(const Query &);n Query query;n set eval(const TextQuery &file)constn n set has_val=query.eval(file);n set ret_line;n for(line_no i=0;i!=file.size();i++)n if(has_val.find(i)==has_val.end())n ret_line.insert(i);n return ret_line;n nn NotQuery(Query q):query(q)n ostream& display(ostream &os)constn n return os<<"~("< eval(const TextQuery& file)const;n;nset AndQuery::eval(const TextQuery& file)constn n set right=rhs.eval(file);n set left=lhs.eval(file);n set ret_lines;n set::const_iterator iter=right.begin();n for(;iter!=right.end();++iter)n if(left.find(*iter)!=left.end())n ret_lines.insert(*iter);n return ret_lines;n nQuery operator&(const Query &lhs,const Query &rhs)nn return new AndQuery(lhs,rhs);nnclass OrQuery: public BinaryQuerynn friend Query operator|(const Query&,const Query &);n OrQuery(Query left,Query right):BinaryQuery(left,right,"|") n n set eval(const TextQuery& file)constn n set right=rhs.eval(file);n set left=lhs.eval(file);nn set::const_iterator iter=right.begin();n for(;iter!=right.end();++iter)n left.insert(*iter);n return left;n nn;nQuery operator|(const Query &lhs,const Query &rhs)nn return new OrQuery(lhs,rhs);nnnn#endifnn```n n```n提示错误 1 error C2259: “AndQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 155 1 New_querynn错误 2 error C2259: “OrQuery”: 不能实例化抽象类 d:\vsproject\new_query\new_query\query.h 159 1 New_querynn跟答案一样,为什么我这个提示错误?n
java抽象和抽象类
java抽象与抽象类
关于抽象类不能被实例化的理解问题
抽象类不能被实例化,但是其非抽象子类被NEW出来的时候依然能调用父类的构造方法是么?rnrn另外是不是可以说抽象类中非抽象的方法和变量都可以被子类所调用,只要不去NEW这个抽象类本身就可以了?rnrn谢谢大家!
java 接口及抽象类实例化
我们通常被告知java的接口和抽象类都是不能被实例化的。但在实际代码中,你是否见过类似以下的奇怪代码: public static void main(String[] args) { Frame frame = new Frame(&quot;kroseing&quot;); frame.addWindowListener(new WindowAdapter() { ...
java抽象类实例化
简单的讲抽象类肯定是可以被实例化的,不过不是通过通常的 new方法来实现的,我们都知道抽象类必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子类的同时父类也必须被实例化,由此可知抽象类肯定是可以被实例化的。 ...
Java的抽象类实例化
简介 《Java编程思想》书中定义抽象类:“包含抽象方法的类”。即如果一个类含有抽象方法,则称这个类为抽象类。 抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以一般不能用抽象类创建对象。 // 抽象类 public abstract class ClassName { // 抽象方法:只有声明,而没有具体的实现 abstract voi...
java 抽象类实例化.
abstract class E{ void outPut(){ System.out.println (&quot;E&quot;); } } public class Test8{ public static void main (String[] args) { E e = new E(){}; e.outPut(); } }    在csdn上看到的,abs...
java 抽象类 实例化
[img=https://img-bbs.csdn.net/upload/201610/02/1475376969_306273.png][/img]rnrn问题:rn1.抽象类为什么可以实例化?rn2.抽象类中如果没有抽象方法,有什么意义?
关于实例化抽象类的讨论
抽象类可不可以实例化? 从广义上来讲,抽象类可以被实例化,从狭义上讲,抽象类不能被实例化,接下来我们将从这两个方面展开讨论. 1.普通类的实例化 我们首先创建一个普通类Person, public class Person{ public void study(){ System.out.println(&quot;我爱学习&quot;); } } 然后再创建一个测试类Tes...
关于抽象类的实例化
class AbstractBase rn rn public:rn AbstractBase();rn virtual void test() = 0; rn ~AbstractBase() ; rn ; rn rn class Derive:public AbstractBase rn rn public: rn Derive() AbstractBase::AbstractBase();;rn void test() return; rn ~Derive() ; rn ; rn rn此代码在VS2003下可以编译通过 但是在VS2005下却提示不能实例化抽象类 急需解决办法,,,
抽象类实例化
process p=null;rnoutputstream ops=p.getoutputstream();rnrnoutputstream 是一个抽象类,怎么可以实例化对象呢??
不能实例化抽象类“错误的解决办法
这篇文章讲解一个编程中遇到一个错误,那就是提示”不能实例化抽象类的错误“,在输出窗口有如下的错误提示信息,如下图: 根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的错误呢,其实是因为,你继承的类的抽象方法没有在继承类中进行重写,比如在这里,我从CView类继承了一个类CTrlee类,但是我没有重写OnDraw函数,然后就进行了对CTrlee类的使用,如下: 那么现
抽象类不能实例化到底是什么意思
我声明了一个抽象类的实例也没有报错啊.请教高手.
网狐“CTableFrameSink”: 不能实例化抽象类
网狐“CTableFrameSink”: 不能实例化抽象类 原因是新的接口,添加了几个虚函数,子类没有得到实现 所以不能初始化 在TableFrameSink中添加下面2个函数  //用户断线 virtual bool OnActionUserOffLine(WORD wChairID, IServerUserItem * pIServerUserItem){return true
抽象类实例化问题
类里是这样定义rnclass CPiecernrn virtual short GetPoint() const = 0;rnrn下面是子类rnclass CLongPiece : public CPiece rn virtual short GetPoints() const return 2;rnrnrn然后是调用 CPiece * pPiece = 0;rn pPiece = new CLongPiece();rnrn编译为不能实例化抽象类。错误是明白了。CPiece类是抽象类,有GetPoint()纯虚函数。不能被实例化。不过子类继承了之后,应该就可以实例化的。只是不知道怎样改比较好。要求就是创建父类指针,并且指向子类实例化地址可以使用。改了半天了实在无语了。本人对于多态虚函数这些完全初涉,望高手指点一下。
抽象类的实例化问题
(https://img-ask.csdn.net/upload/201601/02/1451700671_845273.png) 这个多态的为什么能实现实例化? 类的实例化是指能new一个对象,还是是指有一个引用指向指向new 对象的堆首地址
实例化抽象类问题
比如有这样个抽象类rnrn[code=C#]rnpublic abstract class AbstractClassArnrn public abstract void test();rnrn[/code]rnrn 要生成一个AbstractClassA对象,必须先实现这个抽象类,如:rn[code=C#]rnpublic class A:AbstractClassArnrn public override void test()rnrnrnAbstractClassA objA = new A()rn[/code]rnrn 但是我想直接把实现类的定义跟new操作放在,如:rn[code=C#]rn new AbstractClassA ()rnrn public override void test()rnrn[/code]rnrn这样编译不通过,c#有没有这种写法???
抽象类和实例化的问题
反射中经常用到System.Type, Type应该是一个abstract class,所以不能new实例化,那么我想知道rnint i = 3;rnSystem.Type type = i.GetType(); //这句没有用到new System.Type(),所以应该不是实例化,那么这句叫做什么呢?并且和实例化的执行原理上有什么不同?rn
抽象类问题 对象 实例化
N多数上写的清楚 抽象类不能实例化 只能继承 在子类中实现全部方法后 子类可以实例化对象rnN多blog上写到 抽象类不能实例化rnrn但有人辩解到 不能[color=#FF0000]直接[/color]实例化 而不是不能实例化.rn[url=http://topic.csdn.net/u/20080909/23/6c542080-910d-45cf-9bca-07bcdd5d838e.html][/url]rnrnrn我一直认为 抽象类是不能实例化的rn但今天看到个例子rn[code=C#]XmlReader rdr = XmlReader.Create("book.xml");[/code]rn书上原话, 高级编程 P594rn[color=#0000FF]"XmlReader是一个抽象类, 所以 要直接使用XmlReader类 , 必须添加静态方法Create, 该方法返回一个XmlReader对象."[/color]rnrn我搞不清楚概念了, 也有点儿蒙, 不知如何理解rn一直以来,我认为通过类,创造对象的过程就是实例化的过程. 今天看来有点儿晕....rn对象 != 实例化 ?rnrn欢迎大家来讨论下.
抽象类可以被实例化吗?
看到一条语句:Canlendar cl=Canlendar.getInstance();rnCanlendar是一个抽象类,不能用new来实例化,难道可以用方法来实例化吗?真是不明白
深入Java中的抽象类为何不能实例化?
讨论一下:Java中的抽象类到底为何不能实例化?
问个关于纯虚函数、抽象类的问题
下面的这个程序:rn#include rnusing namespace std;rnclass commonrnrnpublic:rn virtual void ok()=0;rn rn void test()rn rn cout<<"common::test()"<ok();rn ptr=new B();rn ptr->ok();rnrnrn运行结果:rnA::ok()rnB::ok()rnrn如果我把纯虚函数virtual void ok()=0;改写成virtual void ok();程序的运行结果是一样的,那为什么非要写成纯虚函数呢,非要让它成为一个抽象类干什么呢???rn
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件