我有一个名为Song with Class class Creator的课程.下面是Song.h文件.请忽略评论.
#ifndef SONG_H
#define SONG_H
#include <iostream>
class Song
{
public:
class Creator{
public:
//Creator& name(const std::string name){};
void name(const std::string name){};
//std::string getName(){};
};
private:
std::string mName;
};
#endif // SONG_H
Run Code Online (Sandbox Code Playgroud)
这是Song.cpp类
#include "Song.h"
using std::string;
//using Song::Creator;
//Song::Creator& Song::Creator::name(const string name)
void Song::Creator::name(const string name)
{
mName=name;
std::cout<<name;
//return *this;
}
//string Creator::getName()
//{
//return mName;
//}
Run Code Online (Sandbox Code Playgroud)
和主要的课程
#include <iostream>
#include "Song.h"
int main()
{
Song::Creator sc;
sc.name("vickey");
//std::cout<<sc.getName();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在编译它抛出
/home/vickey/qtprojects/innerClass-build-desktop-Desktop_Qt_4_8_0_for_GCC__Qt_SDK__Release/../innerClass/Song.cpp:6: …Run Code Online (Sandbox Code Playgroud) 我有一个内部类(非静态),它在初始化时使用对封闭类的引用.内部类现在会保留对封闭类的引用吗?
class Enclosing {
class Inner {
private final ABC innerField = outerField.computeSomething();
}
private final XYZ outerField = something();
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我非常清楚,一个可以参考的外部类Enclosing.this.
但是,如果类不使用引用,编译后是否必须引用?即使引用仅用于初始化,是否有必要?
它在哪里说内部类总是持有外部类的引用?
您是否有充分的理由可以在Java类中拥有或不具有内部接口?(就像你会内心一样).我无法找到谷歌的确切答案,但看起来好像你不能像使用内部类一样嵌入界面.我的猜测是Java创建者没有看到使其成为可能的一个很好的理由,所以它不是,但也许有很好的理由?
例如我无法编译(这是一大类)
package buttonGetSourceObject;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ClassWithButton implements ActionListener, ButtonOwner{
private String objectName = "";
public ClassWithButton(String string) {
objectName = string;
JFrame f = new JFrame();
JPanel p = new JPanel();
MyJButton b = new MyJButton(this,"Press This Button for Name of Owner of Button");
b.addActionListener(this);
f.add(p);
p.add(b);
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
ClassWithButton c = new ClassWithButton("object1name");
}
@Override
public void actionPerformed(ActionEvent arg0) {
((ButtonOwner)((MyJButton)arg0.getSource()).getOwner()).printInstanceName();
} …Run Code Online (Sandbox Code Playgroud) public class StaticInnerClass {
public static void main(String[] args) {
//Outers out=new Outers();
Outers.Inner1 in=new Outers.Inner2();
in.display();
}
}
class Outers
{
static class Inner1
{
static void display()
{
display();
System.out.println("Inner1");
}
}
static class Inner2 extends Inner1
{
static void display()
{
System.out.println("Inner2");
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的程序给出了stackoverflow错误.请解释为什么它不显示"Inner1",因为静态方法不会覆盖.
虽然这显然是一个RTFM案例,但不知怎的,我找不到一个解释这一切的简明来源.
public class Outer {
private class Inner {
}
}
Run Code Online (Sandbox Code Playgroud)
私人班级Inner是公共班级inner的一类.Outer
我的问题是关于知名度的Inner从外面'外".
我应该能够Inner在另一个类中实例化吗?如果是,是否有任何限制(例如此类在同一个包中,等等)?
可以Inner使用集合时,可以用作一个具体类型?例如,我应该能够ArrayList <Inner>在另一个类中声明吗?
如果上述问题extends Outer会Inner 出现另一个课程?
我必须创建一个允许以下内容的类/构造函数:
Object a = new Object("test");
Object b = new Object("test");
a == b // should be true
Run Code Online (Sandbox Code Playgroud)
所以对象a和b不仅应该根据它们的值相同,而且应该使用相同的引用并引用相同的内存.
构造函数应该查明具有给定值的实例是否已经存在,如果是,则只需获取引用并将其指向现有对象.
有没有办法获得特定类的所有创建实例?有人可以给我一个简短的提示从哪里开始?我不知道...
我很困惑
Abstract Class A{method();method2();}
Run Code Online (Sandbox Code Playgroud)
和其他Class B有内在的Class C
Class B{Abstract Class C{method(){//body}}}
Run Code Online (Sandbox Code Playgroud)
现在问题是如何扩展C类B/C抽象类必须扩展,否则这是Unused类.
我应该何时在类中的结构中定义成员,何时应该在嵌套类中定义成员?
例如:
class SkypeProtocol
{
public:
SkypeProtocol();
virtual ~SkypeProtocol(){}
private:
class SkypeProtocolDateTime
{
private:
UI32 uDate;
ERROR GetDateString(PUCHAR pcBuffer,PUI32 uBufLen);
};
};
Run Code Online (Sandbox Code Playgroud)
要么
class SkypeProtocol
{
private:
SkypeProtocol();
virtual ~SkypeProtocol(){}
typedef struct SkypeProtocolDateTime
{
private:
UI32 uDate;
ERROR GetDateString(PUCHAR pcBuffer,PUI32 uBufLen);
}SSKYPE_STRUCT;
};
Run Code Online (Sandbox Code Playgroud) 尝试在内部类内部使用一个类的本地成员时遇到此错误。我知道将其声明为final将解决此问题,但我读到Java 8应该自动处理它,因为我将Intellij与Java 8一起使用,但它仍然无法编译。还有其他方法可以在不将其声明为final的情况下进行修复吗?谢谢。
inner-classes ×10
java ×8
c++ ×2
class ×2
c++11 ×1
constructor ×1
final ×1
instance ×1
interface ×1
oop ×1
reference ×1
static ×1
visibility ×1