java 中 抽象类不能被实例化 但为什么可以有构造器

构造器不就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器 ?

5个回答

抽象类是不能被实例化,抽象类的目的就是为实现多态中的共同点,抽象类的构造器会在子类实例化时调用,因此它也是用来实现多态中的共同点构造

抽象类可以有成员变量,他们的初始化怎么做呢?这么一样你就明白为什么抽象类可以有构造函数了

构造函数可以在派生类中以Super(...)的形式调用,这样基类的构造就不用重复写了。

构造器是用来初始化的 而不是new对象的 和C++不一样

说白了,抽象类如果有子类,你是不是最好要把字段数据封装到抽象类里呢。。。让子类继承父类啊。没有构造函数怎么办。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 中 抽象类不能被实例化 但为什么可以有构造器
构造器不就是为了初始化对象而存在的吗 既然抽象类不能被实例化 那为什么 还要按个构造器 ?
抽象类不能被实例化
  /** * */ package test919; public abstract class Animal { private String name; public Animal(String name) { super(); this.name = name; } public abstract void enjoy(); } package t...
为什么这里的抽象类可以被实例化??
我记得抽象类好像是不能被实例化的,只能被继承,但是在JAVA参考大全的IO部分几次写到下面的语句让小弟倍感困惑,大家看看到底是怎么个说法啊]rnoutputStream output=new FileOutputStream("text.txt");
java中抽象类也需要构造函数 抽象类可以被实例化
今天被问到抽象类要不要有构造函数的时候, 我随口一答应该是没有的, 我以为, 抽象类是不能直接用new来被实例化的, 所以也就不需要再去写构造函数了; 随后查了一下明白: 抽象类也需要构造函数, 在大多数情况中抽象类往往是要被继承的, 在子类的构造函数中往往会调用父类的构造函数, 在这种情况下就需要父类(抽象类)来提供构造函数来调用super了, 当然如果没有提供的话就会调用默认的构造函数了- -...
抽象类可以被实例化吗?
看到一条语句:Canlendar cl=Canlendar.getInstance();rnCanlendar是一个抽象类,不能用new来实例化,难道可以用方法来实例化吗?真是不明白
抽象类不能被实例化。但是为什么可以这样写?
抽象类不能被实例化。如:Person类是抽象类。rnPerson p=new Person("abc');//错误rnrn但是为什么可以这样写:rnPerson[] p=new Person[2];//OKrnrnrn
抽象类真的也可以被实例化(Java)
抽象类实例化
为什么Image抽象类可以实例化?
如:Image i = Image.FromFile(@"d:\pic.png");rnImage.FromFile返回的是Image
抽象类不能实例化,它的构造器有什么意义?
1.首先要知道JAVA中的构造器,不是用来实例化对象的,而是用来初始化的。 2.抽象类中并不都是抽象方法,里面有成员变量,构造器是用来给这些成员变量赋值的。 【补充】:abstract只能用来修饰类和方法,不能用来修饰属性。 3.要知道抽象类是用来继承的,为什么用来继承,一般是用来实现多态!那么我们知道,在new一个子类对象的时候,默认调用了super(); 那如果没有构造器,这个supe...
抽象类能否被实例化
原理上说不可以,但是我在jdk中发现有好多抽象类都被实例化了,例如calendar类,FormatDate类谁能解释下。
抽象类被实例化?
/*抽象类,继承*/rnabstract class Shapern protected double length;rn protected double width;rn Shape(double num,double num1)rn length = num;rn width = num1;rn rn abstract double area();//该方法没有左右大括号。没有主体。rn rnrnrnclass Square extends Shapern Square(double num,double num1)rn super(num,num1);rn rn double area()rn System.out.println("正方形的面积为:");//重写父类的方法rn return length * width;rn rn rnrnclass Triangle extends Shapern Triangle(double num,double num1)rn super(num,num1);rn rn double area()rn System.out.println("三角形的面积为:");//重写父类的方法rn return (0.5 * length * width);rn rnrnpublic class CalculateArearn protected CalculateArea()rn rn public static void main(String[] args)rn rn Square sqobj = new Square(10,20);rn Triangle trobj = new Triangle(12,8);rn rn System.out.println(sqobj.area());rnrn System.out.println(trobj.area());rn rnrn以上代码能正确运行。rn问题:抽象类不能被实例化,代码:Square sqobj = new Square(10,20); Triangle trobj = new Triangle(12,8);不是创建一个抽象类的实例吗?rn
深入Java中的抽象类为何不能实例化?
讨论一下:Java中的抽象类到底为何不能实例化?
java中抽象类不能实例化,但为什么有些方法却返回抽象类的实例?
比如抽象基类InputStream ,很多方法会返回InputStream的实例,如:rnSocket类的getInputStream()方法:rnrnpublic InputStream getInputStream() throws IOExceptionrn返回的就是InputStream的实例。rn比如:rnSocket s = new Socket("127.0.0.1",30000);rnBufferInputStream bif = new BufferInputStream(s.getInputStream());rnrnInputStream是无法new出实例的,那么这里返回的InputStream实例是怎么来的?
关于抽象类不能被实例化的理解问题
抽象类不能被实例化,但是其非抽象子类被NEW出来的时候依然能调用父类的构造方法是么?rnrn另外是不是可以说抽象类中非抽象的方法和变量都可以被子类所调用,只要不去NEW这个抽象类本身就可以了?rnrn谢谢大家!
不能实例化抽象类?
我在类中需要用到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]
【Debug】不能实例化抽象类
A类继承于B类(抽象类,只有接口),但是没有对B类的接口进行实现,就会提示:不能实例化抽象类。 比如下面的代码: // class IEventParser { virtual void processEvent(int type, std::string json) = 0; virtual void processEvent(int type, std::string json, vo
vc 不能实例化抽象类?
CDataBaseStoreLog 继承自抽象类 CStoreLog,里面实现了抽象方法 writelog 创建对象CDataBaseStoreLog dbfile;时提示不能实例化抽象类是怎么回事?
为什么静态类不能被实例化
请用最通俗的话解释一下为什么静态类不能被实例化。
numberformat是抽象类,为什么能被实例化
NumberFormat nf = NumberFormat.getInstance(Locale.ITALIAN);rnrn我是新手,只知道抽象类不能被实例化,但这句话没错,是怎么回事。是因为返回的是子类吗?
java中初始化,实例化,构造器
java中不管对象也好,还是基本数据类型也好,你声明它的时候,它们都称为变量,在你使用变量前给变量进行赋值,这就是变量的初始值,因此叫变量初始化。 实例化是指对象的创建,一般是指通过 new 关键字(当然还有其他途径,比如反射),在堆中为对象分配内存,这就是实例化。 举个非常简单的例子,你知道飞机会飞,但飞机在你脑海里只是个概念,当真的把飞机制造出来,变成实实在在的,存在于物质世界(jav
Java中抽象类的构造器的作用
因为抽象类不可实例化,那么只能在子类实例化时调用该抽象类的构造器才有用 看实例代码: abstract class Animal { Animal(){ System.out.println("抽象类Animal无参构造器"); //此处执行前会默认执行super() } Animal(int a){ System.out.println("抽象类Animal有参构造器");
抽象类可以实例化吗?
抽象类可以有自己的构造方法,但是不能直接通过new进行实例化。但是可以通过子类继承,实例化子类的时候抽象类也会被实例化。这其实用到了多态,向上转型。父类引用指向子类对象~ ...
Java 抽象类能否被实例化问题
废话不多说 父类Fruit public abstract class Fruit { public String color; //定义一个抽象的方法 public abstract void harvest(); //收获 } Fruit2 抽象类继承 Fruit类 public abstract class Fruit2 extends Fruit { @Overrid...
抽象类为什么可以实例化呢?真是怪怪的?
抽象类为什么可以实例化呢?真是怪怪的?rn一直认为抽象类是无法实例化的,但是代码就在下面,确实可以实例化,真是晕了rn[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.Linq;rnusing System.Text;rnrnnamespace d101008rnrn class Programrn rn public abstract class Class1rn rn string name;rnrn public Class1() name = "No Name"; rn public Class1(string name)rn rn Console.WriteLine("class1 中");rn this.name = name;rn rnrn public string Namern rn getrn rn return name;rn rn rn rnrn class Class2 : Class1rn rn public Class2(string n) : base(n)rn rn Console.WriteLine("class2 中");rn rnrn rnrn static void Main(string[] args)rn rn //Class1 是抽象类呀,为何可以实例化呢?rn Class1[] obj = new Class1[2];rn obj[0] = new Class2("aaaa");rn obj[1] = new Class2("bbbb");rn foreach (Class1 tmp in obj)rn rn Console.WriteLine(tmp.Name);rn rn Console.ReadLine();rn rn rnrnrn[/code]
抽象类,无构造函数,为什么可以实例化?
[img=https://img-bbs.csdn.net/upload/201709/21/1505956769_82173.jpg][/img]rnIRtcEngine是一个抽象类,为什么可以这样写
不是说抽象类不能实例化吗?为什么这里可以。
NumberFormat nf=NumberFormat.getNumberInstance();rnnf.setMaximumFractionDigits(2);rnnf.setMinimumFractionDigits(2);rndouble er = 1254.697;rnString tr = nf.format(er);rnSystem.out.println (tr);rnrn搞不懂,不是说抽象类不能实例化吗?为什么这里可以。
没有构造器的类和有构造器的抽象类
1抽象类——构造方法 既然不能用抽象类的constructor创建对象,还要构造方法干什么???rnrn2没有构造器的类,如何获取相应对象???rnrnrn高手们,请一一回复
java 接口及抽象类实例化
我们通常被告知java的接口和抽象类都是不能被实例化的。但在实际代码中,你是否见过类似以下的奇怪代码: public static void main(String[] args) { Frame frame = new Frame("kroseing"); frame.addWindowListener(new WindowAdapter() { ...
java抽象类实例化
简单的讲抽象类肯定是可以被实例化的,不过不是通过通常的 new方法来实现的,我们都知道抽象类必须被继承,且子类必须覆写父类中全部的抽象方法,但我们都知道在java中实例化子类的同时父类也必须被实例化,由此可知抽象类肯定是可以被实例化的。 ...
Java的抽象类实例化
简介 《Java编程思想》书中定义抽象类:“包含抽象方法的类”。即如果一个类含有抽象方法,则称这个类为抽象类。 抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以一般不能用抽象类创建对象。 // 抽象类 public abstract class ClassName { // 抽象方法:只有声明,而没有具体的实现 abstract voi...
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
java 抽象类 实例化
[img=https://img-bbs.csdn.net/upload/201610/02/1475376969_306273.png][/img]rnrn问题:rn1.抽象类为什么可以实例化?rn2.抽象类中如果没有抽象方法,有什么意义?
java 抽象类实例化.
abstract class E{ void outPut(){ System.out.println ("E"); } } public class Test8{ public static void main (String[] args) { E e = new E(){}; e.outPut(); } }    在csdn上看到的,abs...
JAVA中的接口可以被实例化吗?为什么?
接口是要被实现的,为什么也可以被实例化?rn1)rnpublic interface Handler{rn public void Hello();rn}rnrn2)rnimport Handler;rnpublic class OtherParserrn Handler handler;rn......rnrnrn
关于抽象类不能实例化的问题
抽象类不能实例化;当遇见这种错误,先查看是哪个类导致的该错误;查看该类的继承关系;可以从最新添加的继承关系查起;找到纯虚函数即可;将纯虚函数在该类中重定义即可解决;结合我的错误时,父类中有纯虚函数:virutal void statuschanged (int status)=0;我在类中重新申明:void statuschanged(const int status);在cpp文件中定义:voi...
抽象类不能实例化的问题求助
抽象类不能实例化,也就是不能直接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# 去空格去转义符 c#用户登录窗体代码 c# 流 c# linux 可视化 c# mvc 返回图片 c# 像素空间 c# 日期 最后一天 c#字典序排序 c# 截屏取色 c#中的哪些属于托管机制