精华内容
下载资源
问答
  • staticfinal能否修饰类,方法属性

    千次阅读 2018-12-21 02:50:05
    先描述static ...答:必须先new一个外部类对象,然后在对象.new 外部类创建 代码如下: 2-1:被static修饰的方法被继承后还能被重写吗? 答:可以被重写,一个要求,重写的方法修饰符的范围 需...

    先描述static

    • 不能修饰普通类,可以修饰内部类。
    • 可以修饰方法。
    • 可以修饰属性。

    1-1:修饰内部类后内部类有什么特点?
    答:可以直接创建对象,创建方式如下

    在这里插入图片描述

    1-2:如果内部类没有被继承如果创建对象?
    答:必须先new一个外部类对象,然后在对象.new 外部类创建
    代码如下:

    2-1:被static修饰的方法被继承后还能被重写吗?
    答:不可以被重写,原因:父类用的是子类的实例,是拿不到子类的static属性的。被static修改的变量和方法是和类在编译时候就绑定的。
    代码如下

     class Aoo {
    
        static void method(){
            System.out.println("父类方法");
        }
        void me(){
            System.out.println("非静态父类方法");
        }
    }
    class Boo extends Aoo{
        static void method(){
            System.out.println("子类方法");
        }
        void me(){
            System.out.println("非静态子类方法");
        }
    
        public static void main(String[] args) {
            Aoo t = new Boo();
            t.method();
            t.me();
        }
        
        //输出是   父类方法
        //        非静态子类方法
    }
    

    2-2:被static修饰的方法能否重载?
    答:当然能,代码如下
    在这里插入图片描述

    3-1:被static修饰的属性有什么特征?
    答:在类加载时候就被执行,称为静态变量(也有常量)/类变量存储在方法区中。
    可以直接用类去调用属性,不需要实例对象。


    描述final关键字

    1:可以修饰普通类,被修饰的类无法被继承(常见例子,String类)
    2:可以修饰内部类,也不能被继承。
    3:可以修饰方法,被修饰的方法可以被重载,不能被重写。
    4:可以修饰属性,被修饰的属性为常量,必须要初始化常量。

    1-1:重载代码如下
    在这里插入图片描述

    展开全文
  • 一、构造方法的定义(一)什么构造方法实例化一个类的对象后,...构造方法的名字必须和类名完全相同。2.方法名前面没有返回值,甚至连表示没有返回值的空类型(void)也没有。3.在方法中不能使用return语句返回一个值。4...
    3a401439b14d5c532fe94ca4e5bc3790.png

    一、构造方法的定义

    (一)什么构造方法

    实例化一个类的对象后,如果要给属性赋值,需要通过访问对象的属性或setXXX()方法。在实例化对象后同时给对象的属性赋值可以使用构造方法,构造方法也叫做构造函数。用来对对象进行初始化。

    (二)构造方法特点

    1.构造方法的名字必须和类名完全相同。

    2.方法名前面没有返回值,甚至连表示没有返回值的空类型(void)也没有。

    3.在方法中不能使用return语句返回一个值。

    4.构造方法一般定义是为public。

    5.使用new运算符调用构造方法。

    (三)如何在类中定义构造方法

    例如:

    public class Person {    public String name; //成员变量--名字    public int age; //成员变量--年龄 //构造方法--方法名和类型是相同的,并且没有返回值类型和返回值   public Person(String s, int a){          name = s; //为name属性赋值          age = a; //为age属性赋值  }  //say()方法 public void say(){      System.out.println("你好!我是" + name + ",今年" + age + "岁。"); }         public static void main(String[] args) {        // TODO Auto-generated method stub         Person p1 = new Person("李华", 20);//创建第一个对象             Person p2 = new Person("小名", 19);  //创建第二个对象             p1.say();  //调用对象的方法             p2.say();  //调用对象的方法     } } 

    输出的结果是:

    你好!我是李华,今年20岁。

    你好!我是小名,今年19岁。

    首先是Person类定义了有参的构造方法Person(String s, int a)在new Person实例化对象时同时调用有参的构造方法,在有参的构造方法Person(String s, int a)给name和age属性赋值。

    二、构造方法的重载

    1.构造方法的重载:在一个类中可以定义多个构造方法,只要每个构造方法参数类型或参数个数不一样。

    2.如何实现构造方法的重载

    例如:

    class Person{ public String name; public int age; //定义两个参数的构造方法 public Person(String s,int a){   name=s;   age=a; } //定义一个参数的构造方法 public Person(String s){   name=s; } //say()方法 public void say(){ //控制台输出name和age的值   System.out.println("你好!我是" + name + ",今年" + age + "岁。");   } } public class p16 { public static void main(String[] args) {   // TODO Auto-generated method stub   Person p1=new Person("李华");//创建第一个对象   Person p2=new Person("小名",19);//创建第二个对象   p1.say();//调用对象的方法   p2.say();//调用对象的方法   } } 

    输出的结果是:

    你好!我是李华,今年0岁。

    你好!我是小名,今年19岁。

    在上面代码中,Person类中定义了两个参数构造方法和一个参数构造方法,它们是构造方法的重载。在创建实例化对象,p1和p2因为传入的参数的不同,调用的不同的构造方法。我们发现两个构造方法给对象的属性赋值不同,在给一个参数的构造方法中只是给name赋值的,此时的age属性的值是默认为0的。

    三、类和数组的使用

    1.一个案例来分析类和数组的使用

    例如:

    public class Person5 { public String name;//姓名 public int age;//年龄 //say()方法 public void say(){   System.out.println("你好!我是" + name + ",今年" + age + "岁。"); }  public static void main(String[] args) { // TODO Auto-generated method stub //创建数组     Person5[] students;     students = new Person5[2];     //创建第一个对象z     Person5 z = new Person5();     z.name = "张三";//给name属性赋值     z.age = 18;//给age属性赋值     //创建第二个对象l     Person5 l = new Person5();     l.name = "李华";//给name属性赋值     l.age = 20;//给age属性赋值     //给数组赋值     students[0] = z;     students[1] = l;     //调用方法     l.say();     students[0].say();   } } 
    ca557133bd764239018e7a02b3e89916.png

    从上面的代码中,定义个Person类,这个类中有成员变量name和age,还有一个say()方法。在主程序(main)方法中创建了数组,通过数组的下标为数组赋值,创建两个对象分别给每个一个对象name属性和age属性赋值,最后调用Person类中的方法。

    四、总结

    本文主要介绍了构造方法、构造方法的重载、类和数组的使用。构造方法介绍了在实例化对象后同时给对象的属性赋值,构造方法的特点,通过一个案例类中如何定义构造方法来了解这个用法。构造方法的重载在一个类中可以定义多个构造方法,只要每个构造方法参数类型或参数个数不一样。类和数组的使用通过一个简单的案例来了解怎样去使用。

    希望通过本文的学习,对你有所帮助!记得点个关注哦,好文每天更新~

    展开全文
  • 抽象类可以被继承但是不能够被实例化,抽象类中可以抽象方法和普通方法,某个类继承抽象类必须实现抽象类中的抽象方法。接口不能包含属性,只能声明方法,方法不能包含具体的实现,类实现某个接口的时候,必须实现...

    前言

    在刚开始学习面向对象语言时,一定会学到抽象类和接口,它们之间的区别又是什么呢?什么时候该用抽象类?什么时候该用接口呢?

    抽象类和接口的语法特性

    抽象类可以被继承但是不能够被实例化,抽象类中可以有抽象方法和普通方法,某个类继承抽象类必须实现抽象类中的抽象方法。接口不能包含属性,只能声明方法,方法不能包含具体的实现,类实现某个接口的时候,必须实现接口中的所有方法。

    抽象类和接口存在的意义

    抽象类是对成员变量和方法的抽象,是一种 is-a 的关系,是为了解决代码复用的问题。接口仅是对方法的抽象,是一种 has-a 的关系,表示具有某一组的行为特征,是为了解决耦合的问题,隔离接口和具体的实现,提高代码的扩展性。

    接口和抽象类的应用场景

    什么时候该用抽象类?什么时候该用接口?其实,判断的标准十分的简单,如果是一种 is-a 的关系,并且是为了解决代码复用的问题,那就选择抽象类。如果是 has-a 的关系,并且是为了解决抽象的问题而非代码复用的问题,那就使用接口。

    总结

    在平时代码编写的时候,合理使用抽象类和接口,可以使得代码更加容易维护和复用,同时注意接口和抽象类的区别,合理的选择。

    参考:https://time.geekbang.org/column/article/165103?utm_campaign=guanwang&utm_source=baidu-ad&utm_medium=ppzq-pc&utm_content=title&utm_term=baidu-ad-ppzq-title

    展开全文
  • 前言 可能说起C++大多数人都觉着难学,其实我... 2、如果实现一个类之后,他大量的属性,而且这些属性都需要setget方法,那么我们还是要Ctrl +CCtrl+V吗?如果好多这样的类,还是Ctrl+CCtrl+V吗?对于第一个
  • 面向对象设计原则

    2013-08-02 18:31:12
     要回答这个问题,要首先搞清楚抽象类接口的关系:接口是一种特殊的抽象类,所有接口中的属性自动是常量,也就是public final static的,而所有接口中的方法必须是抽象的抽象类,简单点说是用abstract修饰的类。...


    一、抽象类与接口 

    的朋友可能会问一个问题,不是说在Java中应该尽量面向接口编程吗,为何模板方法的模板是采用的抽象方法呢?

        要回答这个问题,要首先搞清楚抽象类和接口的关系:

    接口是一种特殊的抽象类,所有接口中的属性自动是常量,也就是public final static的,而所有接口中的方法必须是抽象的

    抽象类,简单点说是用abstract修饰的类。这里要特别注意的是抽象类和抽象方法的关系,记住两句话:

        抽象类不一定包含抽象方法;有抽象方法的类一定是抽象类

    抽象类和接口相比较,最大的特点就在于抽象类里面是可以有具体的实现方法的,而接口中所有的方法都是没有具体的实现的。

    因此,虽然Java编程中倡导大家“面向接口编程”,并不是说就不再使用抽象类了,那么什么时候使用抽象类呢?

    通常在既要约束子类的行为,又要为子类提供公共功能的时候使用抽象类。

    按照这个原则来思考模板方法模式的实现,模板方法模式需要固定定义算法的骨架,这个骨架应该只有一份,算是一个公共的行为,但是里面具体的步骤的实现又可能是各不相同的,恰好符合选择抽象类的原则。

    把模板实现成为抽象类,为所有的子类提供了公共的功能,就是定义了具体的算法骨架;同时在模板里面把需要由子类扩展的具体步骤的算法定义成为抽象方法,要求子类去实现这些方法,这就约束了子类的行为。

    因此综合考虑,用抽象类来实现模板是一个很好的选择。

     
    二、模式的功能 
        模板方法的功能在于固定算法骨架,而让具体算法实现可扩展。

        这在实际应用中非常广泛,尤其是在设计框架级功能的时候非常有用。框架定义好了算法的步骤,在合适的点让开发人员进行扩展,实现具体的算法。比如在DAO实现中,设计通用的增删改查功能,这个后面会给大家示例。

        模板方法还额外提供了一个好处,就是可以控制子类的扩展。因为在父类里面定义好了算法的步骤,只是在某几个固定的点才会调用到被子类实现的方法,因此也就只允许在这几个点来扩展功能,这些个可以被子类覆盖以扩展功能的方法通常被称为“钩子”方法,后面也会给大家示例。

     三、变与不变
        程序设计的一个很重要的思考点就是“变与不变”,也就是分析程序中哪些功能是可变的,哪些功能是不变的,然后把不变的部分抽象出来,进行公共的实现,把变化的部分分离出去,用接口来封装隔离,或者是用抽象类来约束子类行为。
        模板方法模式很好的体现了这一点。模板类实现的就是不变的方法和算法的骨架,而需要变化的地方,都通过抽象方法,把具体实现延迟到子类去了,而且还通过父类的定义来约束了子类的行为,从而使系统能有更好的复用性和扩展性。 

     
    四、好莱坞法则
        什么是好莱坞法则呢?简单点说,就是“不要找我们,我们会联系你”。

        模板方法模式很好的体现了这一点,做为父类的模板会在需要的时候,调用子类相应的方法,也就是由父类来找子类,而不是让子类来找父类。

        这其实也是一种反向的控制结构,按照通常的思路,是子类找父类才对,也就是应该是子类来调用父类的方法,因为父类根本就不知道子类,而子类是知道父类的,但是在模板方法模式里面,是父类来找子类,所以是一种反向的控制结构。

     五、单一职责原则SRP(Single Responsibility Principle)

    所谓单一职责原则,指的就是:一个类应该仅有一个引起它变化的原因。

    这里变化的原因就是所说的“职责”,如果一个类有多个引起它变化的原因,那么也就意味着这个类有多个职责,再进一步说,就是把多个职责耦合在一起了。

    这会造成职责的相互影响,可能一个职责的变化,会影响到其它职责的实现,甚至引起其它职责跟着变化,这种设计是很脆弱的。

    这个原则看起来是最简单和最好理解的,但是实际上是很难完全做到的,难点在于如何区分这个“职责”,这是个没有标准量化的东西,哪些算职责,到底这个职责有多大的粒度,这个职责如何细化等等。因此,在实际开发中,这个原则也是最容易违反的。


    六、  开放-关闭原则OCP(Open-Closed Principle)

           所谓开放-关闭原则,指的就是:一个类应该对扩展开放,对修改关闭。一般也被简称为开闭原则,开闭原则是设计中非常核心的一个原则。

           开闭原则要求的是,类的行为是可以扩展的,而且是在不修改已有的代码的情况下进行扩展,也不必改动已有的源代码或者二进制代码。

           看起来好像是矛盾的,怎么样才能实现呢?

    实现开闭原则的关键就在于合理的抽象,分离出变化与不变化的部分,为变化的部分预留下可扩展的方式,比如:钩子方法、或是动态组合对象等等。

           这个原则看起来也很简单,但事实上,一个系统要全部做到遵守开闭原则,几乎是不可能的,也没这个必要。适度的抽象可以提高系统的灵活性,使其可扩展、可维护,但是过度的抽象,会大大增加系统的复杂程度。应该在需要改变的地方应用开闭原则就可以了,而不用到处使用,从而陷入过度设计。
     

    七、 里氏替换原则LSP(Liskov Substitution Principle)

           所谓里氏替换原则,指的就是:子类型必须能够替换掉它们的父类型。这很明显是一种多态的使用情况,它可以避免在多态的应用中,出现某些隐蔽的错误。

    事实上,当一个类继承了另外一个类,那么子类就拥有了父类中可以继承下来的属性和操作,理论上来说,此时使用子类型去替换掉父类型,应该不会引起原来使用父类型的程序出现错误。

    但是,很不幸的是,在某些情况下是会出现问题的,比如:如果子类型覆盖了父类型的某些方法,或者是子类型修改了父类型某些属性的值,那么原来使用父类型的程序就可能会出现错误,因为在运行期间,从表面上看,它调用的是父类型的方法,需要的是父类型方法实现的功能,但是实际运行调用的确是子类型覆盖实现的方法,而该方法跟父类型的方法并不一样,那就会导致错误的产生。

    从另外一个角度来说,里氏替换原则是实现开闭的主要原则之一,开闭原则要求对扩展开放,扩展的一个实现手段就是使用继承,而里氏替换原则是保证子类型能够正确替换父类型,只有能正确替换,才能实现扩展,否则扩展了也会出现错误。


    八、 依赖倒置原则DIP(Dependence Inversion Principle)

           所谓依赖倒置原则,指的就是:要依赖于抽象,不要依赖于具体类。要做到依赖倒置,典型的应该做到:

    • 高层模块不应该依赖于底层模块,二者都应该依赖于抽象
    • 抽象不应该依赖于具体实现,具体实现应该依赖于抽象

           很多人觉得,层次化调用的时候,应该是高层调用“底层所拥有的接口”,这是一种典型的误解。事实上,一般高层模块包含对业务功能的处理和业务策略选择,应该被重用,应该是高层模块去影响底层的具体实现。

    因此,这个底层的接口,应该是由高层提出的,然后由底层实现的,也就是说底层的接口的所有权在高层模块,因此是一种所有权的倒置。

           倒置接口所有权,这就是著名的Hollywood(好莱坞)原则:不要找我们,我们会联系你。


    九、接口隔离原则ISP(Interface Segregation Principle)

           所谓接口隔离原则,指的就是:不应该强迫客户依赖于他们不用的方法。

    这个原则用来处理那些比较“庞大”的接口,这种接口通常会有较多的操作声明,涉及到很多的职责。客户在使用这样的接口的时候,通常会有很多它不需要的方法,这些方法对于客户来讲,就是一种接口污染,相当于强迫用户在一大堆“垃圾方法”里面去寻找他需要的方法。

    因此,这样的接口应该被分离,应该按照不同的客户需要来分离成为针对客户的接口,这样的接口里面,只包含客户需要的操作声明,这样既方便了客户的使用,也可以避免因误用接口而导致的错误。

    分离接口的方式,除了直接进行代码分离之外,还可以使用委托来分离接口,在能够支持多重继承的语言里面,还可以采用多重继承的方式进行分离。
     

    十、最少知识原则(Least Knowledge Principle)

    所谓最少知识原则,指的就是:只和你的朋友谈话。

    这个原则用来指导我们在设计系统的时候,应该尽量减少对象之间的交互,对象只和自己的朋友谈话,也就是只和自己的朋友交互,从而松散类之间的耦合。通过松散类之间的耦合来降低类之间的相互依赖,这样在修改系统的某一个部分时候,就不会影响其它的部分,从而使得系统具有更好的可维护性。

    那么究竟哪些对象才能被当作朋友呢?最少知识原则提供了一些指导:

    • 当前对象本身
    • 通过方法的参数传递进来的对象
    • 当前对象所创建的对象
    • 当前对象的实例变量所引用的对象
    • 方法内所创建或实例化的对象

    总之,最少知识原则要求我们的方法调用,必须保持在一定的界限范围之内,尽量减少对象的依赖关系。


    十一、  其它原则

           除了上面提到的这些原则,还有一些大家都熟知的原则,比如:

    • 面向接口编程
    • 优先使用组合,而非继承

    当然也还有很多大家不是很熟悉的原则,比如:

    • 一个类需要的数据应该隐藏在类的内部
    • 类之间应该零耦合,或者只有传导耦合,换句话说,类之间要么没有关系,要么只使用另一个类的接口提供的操作
    • 在水平方向上尽可能统一的分布系统功能


    展开全文
  • 面试-“==”“equals”什么区别? 在各种博客可以查到很多关于这个问题的答案:= = 比较地址值,equals比较属性。 答案肯定不是面试官想听到的。 我们在使用==equals进行比较的时候,必须分清楚比较的是“基本...
  • thissuper关键字

    2020-09-15 09:49:09
    this关键字: 1.this没有创建新对象呢?...2)构造器中可以调用类中的属性方法和构造器。this.属性/方法或this(参数)。 但是方法中只能调用类中的属性和方法,不能调用构造器。 因为构造器去开辟内存创
  • 6.1.1 属性类型1ECMA两种属性:数据属性和访问器属性1.数据属性这都是处理对象的吗要修改属性默认的特性,必须使用object.defineProperty()方法。这个方法接收三个参数:属性所在的对象属性的名字一个描述符...
  •  final 用于声明属性方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的...
  • 继承貌似没有什么好说的,大家都懂,不就是儿子可以拥有父亲的属性和方法吗~~~ 是的~继承就是让儿子拥有父亲的属性和方法。在C#中,只能单继承类多继续接口。这点我也不想再废话。兴趣可以找下 接口注入 很多...
  • 我先写两个类Test1Test2,目的是想不通过new调用另一个类中的方法 ``` public class Test1 ...这样,我在Test2中只需要声明一下就可以在Say()...搞不懂,字段属性和对象我发现我突然不懂了……希望大虾解答 -_-
  • 70、TreeSet里面放对象,如果同时放入了父类子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的compareTo方法,还是抛异常! 48 71、说出一些常用的类,包,接口,请各举5个 49 72、java中...
  • final 用于声明属性方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象...
  • 但是自定义的方法必须使用父类提供的方法实现,这样可保证父类的数据库操作方式改变下层代码无需更改。 <pre name="code" class="java">public class UserDAO extends GenericDefaultDAO<user, string=""&...
  • ios 面试题整合1

    2016-06-29 11:02:41
    \u2028name =”object”\u2028什么不同吗? self.name ="object":会调用对象的setName()方法; name = "object":会直接把object赋值给当前对象的name属性。 函数前的 + -方法修饰符 - 代表此方法是实例...
  • 方法或者属性时候,未必能确定该对象是什么类创建的,我觉得这样就很模糊,上面所说到底是 创建该对象的类型有关,还是对象引用的类型有关(上面曾经提到 调用protected的条件:调用使用的对象 必须是自身类...
  • 在XML文档中,我们可以将每一个标识元素看作一个对象---它自己的名称和属性。 XML创建了标识,而DOM的作用就是告诉script如何在浏览器窗口中操作和显示这些标识 上面我们已经简要的讲述了一些XML的基本原理,...
  • java抽象类

    2020-06-08 08:55:50
    因为抽象类不能实例化对象,所以必须子类重写他的属性和方法才能实现它。 当又一个具有相似的组件产生时,只需要实现该抽象类就可以获得该抽象类的那些属性和方法。 1、 比如本科研究生可以抽象成学生,他们...
  • java 面试题 总结

    2009-09-16 08:45:34
     final 用于声明属性方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的...
  • 方法实现了信号槽函数的关联,第一个按钮我们直接在设计器中实现其关 联;第二个按钮我们自己写了槽函数语句,其实图形的设计与直接写代码效果是 一样的。 这个程序里我们实现了两类窗口打开的方式,一个是自身...
  • 数组中常用的属性和一些方法如下,直接调用相关的方法即可。这里不做演示~ <p><strong>常用的属性</strong></p> <ul><li>length : 表示数组的长度</li></ul> <p><strong>常用的方法</strong></p> <ul>...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题,指导计算机软件开发维护的一门工程学科。  软件工程的原则 任务2 软件生命周期与软件开发模型 软件生命周期 软件开发模型 ...
  • 前几天在学习MapObject时,忽然想到一个问题: 大家思考过Object的key为什么要用toString()方法转换成字符串...因为变量和对象中的属性是随时可变的,所以,对象所占用的空间必须支持随时调整。从这个角度说,Ha...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    一、Java基础知识 1.Java那些基本数据类型,String是不是基本...这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...
  • 抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。 41.构造器Constructor是否可被override? 答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被...
  • 其中包括“添加一张新订单”的方法Insert()根据一个已的订单号取得此订单详细信息的方法GetOrder(),此方法返回的是一个OrderInfo对象。(Model中的OrderInfo类模型定义了用户的某一张Order中相关的信息,如发货...
  • 正则表达式

    2014-12-03 14:51:39
    JavaScript的RegExp对象和String对象定义了使用正则表达式来执行强大的模式匹配文本检索与替换函数的方法. 在JavaScript中,正则表达式是由一个RegExp对象表示的.当然,可以使用一个RegExp()构造函数来创建RegExp...
  • 这也意味着所有的全局变量或者方法都是window对象属性方法。当一个函数在被调用的时候都会创建自己的执行环境,而这个函数中所写的代码就开始进入这个函数的执行环境,于是由变量对象构建起了一个...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    30. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 12 31. Java的接口C++的虚类的相同不同处。 12 32. Java中的异常处理机制的...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

对象必须有方法和属性吗