java嵌套是什么意思 Java中什么是嵌套类
今天给各位分享java嵌套是什么意思的知识,其中也会对Java中什么是嵌套类进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Java嵌套类
这么说看你理解吧
1.类Class,根据面向对象编程,它是描述对象的原型,拥有自己的属性和行为;
2.我们在定义类时,会根据某特性抽象出一个类,这个类可以完成某些特有的功能
如:设计一个打印类Printer,有个一个打印方法print(Object obj)
3.因为我们定义的类是public的,此时Printer类是共用的,大家都可以直接使用
publicclassPrinter{
publicvoidprint(inttype,Objectdata){
//打印的具体实现
}
}
到这里是没有问题的
但是在某些时候,我们需要实现一些特有的逻辑,这部分逻辑又不想暴露给其他人
如Printer在执行打印方法print需要对入参data处理
这个时候首先考虑的是给Printer类增加private私有方法(可能有多个),一般都能解决大部分问题
publicclassPrinter{
publicvoidprint(inttype,Objectdata){
//打印的具体实现
if(type==1){
printTxt(data);//打印txt文件
}
if(type==2){
printExl(data);//打印Exl文件
}
}
privatevoidprintTxt(Objectdata){
//打印txt文件
}
privatevoidprintExl(Objectdata){
//打印Exl文件
}
}
根据OOP的设计原理,Printer新加的私有方法【不属于】Printer,而更像另一个独立的类,
这个时候就使用嵌套类,把他隐藏在Printer,不让他人使用,如下:
publicclassPrinter{
publicvoidprint(inttype,Objectdata){
//打印的具体实现
if(type==1){
TxtPrintertxter=newTxtPrinter();//打印txt文件
txter.print(data);
}
if(type==2){
ExlPrinterexlter=newExlPrinter();//打印Exl文件
exlter.print(data);
}
}
privateclassTxtPrinter{//嵌套类
publicvoidprint(Objectdata){
}
}
privateclassExlPrinter{//嵌套类
publicvoidprint(Objectdata){
}
}
}
例子可能不够生动,应该能解释清楚:
有个类Class B,他的逻辑只对Class A负责,但是又不想把B暴露给他人,就把B定义成A的嵌套类
亲,如果回答满意,请即时采纳,你的配合是我回答的动力!
Java中什么是嵌套类
静态内部类(也称:嵌套类)
如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着:
1.要创建嵌套类的对象,并不需要其外围类的对象。
2.不能从嵌套类的对象中访问非静态的外围类对象。
1)事实上,与前相同,静态内部类也就类似一个类的静态成员方法,它不需要外部类的对象而直接由外部类创建。
2)类似一个类的静态成员方法,它只能访问外部类的静态成员,而不能访问非静态成员。
3)静态内部类中可以定义静态成员,当然也可以定义非静态成员。而其它的内部类都不能定义静态成员。
4)在类外部生成一个静态内部类也和在类外部调用静态方法一样,直接用外部类名创建,如下例:
Outer.Inner in= new Outer.Inner();
java中:是什么意思
表示作用域,和所属关系。
::是运算符中等级最高的,它可以分为以下三种:
1、global scope(全局作用域符),用法(::name)
2、class scope(类作用域符),用法(class::name)
3、namespace scope(命名空间作用域符),用法(namespace::name)他们都是左关联(left-associativity)他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a;
如果想调用class A中的成员变量a,那么就写成A::a,另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespacestd;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout)。
扩展资料:
::在C++中的具体用法:
1、作用域符号:
前面一般是该类名称,后面是该类的成员名称。C++为避免不同的类有相同的成员而采用作用域的方式进行区分,eg:A,B表示两个类,在A,B中都有成员member,那么:A::member表示A中的成员member,B::member表示B中的成员member。
2、全局作用域符号:
当全局变量在局部函数中与其中某个变量重名时,可以用::来区分,否则局部变量会屏蔽全局变量。
3、作用域分解运算符:
比如声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f函数的定义,那么在类外定义f时,就要写成void A::f(),表示这个f函数是类A的成员函数。
参考资料:百度百科-C++
Java 静态内部类作用
1、变值权限修饰作用,在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。
2、在某些特殊的情况下,少了这个静态内部类还真是不行。如在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。
3、最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。
这对于代码测试是非常有用的。在一些中大型的应用程序开发中,则是一个常用的技术手段。
扩展资料例如:
对于两个类,拥有相同的方法:
class People{
run();
}
interface Machine{
run();
}
此时有一个robot类:
class Robot extends People implement Machine.
此时run()不可直接实现。
interface Machine{
void run();
}
class Person{
void run(){
System.out.println("run");
}
}
class Robot extends Person{
private class MachineHeart implements Machine{
public void run(){
System.out.println("heart run");
}
}
public void run(){
System.out.println("Robot run");
}
Machine.getMachine(){returnnew MachineHeart();
}
class Test{
publicstaticvoid main(String[] args){
Robot robot=new Robot();
Machine m=robot.getMachine();
m.run();
robot.run();
}
}
参考资料来源:百度百科-静态内部类
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!