在上篇《难倒高手的五行代码》里边,有人说没有意义,在大多数真正编程中确实是没有意义。但是在面试或者考试中是难免遇上。毕竟面试不可能直接让你写个操作系统什么的。这是一般的看法。另一个角度上来说,我觉的有人在编程,也有人需要分析理论。两者都是不能少的。比如你的老师也许到公司编程不如你,但是要交学生你很难比上你的老师。况且你说没用也许因为你看不懂,如果能真正分析清楚这个,你会对Java语言的设计有一个新的了解。
昨天跟同学讨论了下。同学拿c++运行试了,结果产生了不同的结果。
int c=1;c=c++ 这句在Java中运行后c的值是1.但是在C++中是2。
int[] array=new int[5]; int k=2; array[++k]=k=6; 在Java中运行结果k为6,array[3]=6.而在c++中则产生溢出错误。
看来Java和c++在细微之处设计是有很大不同的。
我又试了c#。c#中与Java运行结果相同。c#不得不承认其更接近Java,而不是C++。下面讨论两个问题,是曾经让我迷茫的东西。
(1)java中构造方法如果用private修饰,会产生不能在其他类中用此构造方法创建此类的对象的情况
如下例所示: private修饰的构造方法,不能在类Gz中用此构造方法创建A的对象。
class A{
private A(int a){
System.out.println("This is A");
}
public A(){
}
}
public class Gz{
public static void main(String[] args) {
// TODO 自动生成方法存根
A b=new A();//正确
A a=new A(12);//此句会编译出错,因为私有化方法在其他类中不能访问,构造方法也不例外
}
}
(2)关于接口和父类,想说明几个问题。首先接口中定义的变量即便不加修饰,默认也是static final的。如果接口和父类创建了一个共同的变量,用子类自己创建的对象去访问这个变量会由于不知道使用哪个而出错。但是如果用子类实例化的接口或父类对象却能够正确的访问自己创建的变量
interface Fc{
int a=44;
int b=66;
}
class A{
int a=55;
}
public class Gz extends A implements Fc{
public static void main(String[] args) {
Gz ngz=new Gz();//创建子类的对象
System.out.println(ngz.b);
System.out.println(ngz.a);//此句出错,因为父类和接口都有a,不知道使用哪个
System.out.println(Gz.b);//正确,接口中定义的变量默认是static的,所以可以当作类变量来使用
System.out.println(Gz.a);////此句出错,因为父类和接口都有a,不知道使用哪个
Gz.b=45;//此句出错,接口中的变量默认是final,也就是常量,不能进行修改
System.out.println(Gz.b);
//*********************
Fc f1=new Gz();//用子类来实例化接口对象
System.out.println(f1.a);//此句正确,会自动使用接口中的a
//*********************
A a1=new Gz();//用子类来实例化父类对象
System.out.println(a1.a);//此句正确,会自动使用父类中的a
}
}
分享到:
相关推荐
在Java中,除了单态模式,构造方法私有化还常用于其他设计模式,如工厂模式(Factory Pattern)和抽象工厂模式(Abstract Factory Pattern),以及作为静态工具类(Static Utility Class)的实现方式,防止这些类被...
NULL 博文链接:https://chaoyi.iteye.com/blog/2078079
java训练题目 编写程序实现子类对父类构造方法的引用?
### Java中的继承(子类调用父类构造方法) #### 一、继承的基本概念 Java是一种支持面向对象编程的语言,其中“继承”是一项核心特性。继承允许创建一个新的类(称为子类或派生类),该类继承了现有类(称为父类...
构造方法与抽象类和接口 - 抽象类可以有构造方法,但接口不能。接口中的所有成员都是公开的(public),因此在接口中定义构造方法是非法的。 - 抽象类的子类在实例化时,必须调用抽象类的构造方法来初始化父类的...
构造方法私有化,也是说,这个类的构造方法是私有的。比如: public class Person{ private String name; Private Person(String Name){ //私有的构造方法 this.name = name; } } 我们不能...
"C++ 子类构造函数初始化及父类构造初始化的使用" C++ 中的构造函数初始化是指在类对象创建时对其进行初始化的过程。构造函数是类的特殊成员函数,用于初始化类对象。在 C++ 中,子类构造函数的初始化涉及到父类...
Java的子类调用父类的构造方法.pdf
本篇文章将深入探讨如何在NDK环境中调用Java的构造方法、父类方法以及处理Java返回的中文字符串可能出现的乱码问题。 首先,让我们了解一下在C/C++中调用Java的方法。这主要依赖于JNI(Java Native Interface)。...
构造方法的主要作用是在创建对象时初始化该对象的状态。通过在构造方法中设置初始值,可以确保对象在使用前已经被正确初始化,从而避免潜在的错误和异常。 #### 三、构造方法的分类 构造方法可以根据参数的不同...
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
程序中描述了子类对象构建调用父类的构造方法,以及类变量和实例变量创建的不同过程
在Java编程语言中,构造方法(Constructor)是一个特殊的方法,它的主要作用是初始化新创建的对象。构造方法与类名相同,没有返回类型,也不需要在方法签名中声明void。了解和熟练使用构造方法是Java面向对象编程的...
当父类和子类都定义了构造方法时,如果父类的构造方法初始化父类定义的成员,子类的构造方法初始化子类定义的成员,在创建子类的对象时,这两个构造方法都要执行。这种情况下,必须在子类的构造方法中使用关键字 ...
如果子类没有定义自己的构造函数(即没有定义`__init__`方法),那么在实例化子类时,Python会自动调用父类的构造函数来初始化对象。例如: ```python class Son(Father): def getName(self): return 'Son' + ...
在Java编程语言中,子类继承父类时,构造方法起着至关重要的作用。它们用于初始化对象,并在创建新实例时执行特定的设置步骤。理解如何在子类中使用构造方法是掌握面向对象编程的关键部分。本文将深入探讨Java子类...
本文探讨了 Java 中构造方法的概念、特点和应用,通过对构造方法的深入研究和探讨,阐述了其在继承和设计模式中的重要作用。 知识点一:构造方法的概念和特点 构造方法是 Java 中一个特殊的方法,它用来初始化对象...
4. **作用**:构造方法的主要任务是初始化对象的状态,通过给实例变量赋值。 5. **参数**:构造方法可以带有参数,这样可以根据不同的参数值创建具有不同初始状态的对象。这称为重载构造方法,即在同一个类中定义多...