Java Constructer calling by supper() key word make conflict results

java super constructor
super and super() in java
super keyword in java pdf
subclass constructor in java with example
java call super constructor
call to super must be first statement in constructor
inheritance in java
super.super in java

Here is the code I implemented to check behaviors of inheritors

Super class

class Vehicle {

    public Vehicle(int x) {
        System.err.println("super param " +x);

    public Vehicle() {
        System.err.println("super defult");

Sub class

class Bus extends Vehicle {

    public Bus(int y) {
        System.out.println("Sub param");

    public Bus() {
        System.out.println("Sub Class defult");

Main class is

public class TestClass {
    public static void main(String[] args) {
        new Bus();

Three deferent out come results given like below

result 1

result 2

result 3

**What happen in here? The order of the output is different than we expect **

System.out is "standard output" (stdout) and System.err is "error output" (stderr), And they both are different file descripters. Derived class is using stdout fd and Parent class is using stderr fd.

Your program is not forcibly flushing the outputs too. You can force the flush by adding new lines in the statements, and it will preserve the order of prints.

Since your code in not force flushing the outputs on fds, kernel does it for you after the program terminates, and there is no guarantee that which fd will be flushed first.

Concepts in Programming Languages, An overriding method must not conflict with the definition that it overrides by having a different return type. An overridden method of the superclass can be accessed with the keyword Java guarantees that a constructor is called whenever the call super() will not match a declared constructor, and a compiler error results. First 2 constructors are calling the third one. Super() is called exactly once, also instance variable is set only in one constructor. Code produces the same result without need to call super() and this() in same constructor.

In your superclass you print to System.err but in the subclass you print to System.out so your issue has nothing to do with inheritance but on how printing works.

OOP Inheritance & Polymorphism - Java Programming Tutorial, A class called Author is designed as shown in the class diagram. In Java, you define a subclass using the keyword " extends ", e.g., create a no-argument (no​-arg) constructor, that simply issues a super() call, This has a serious drawback if the superclasses have conflicting implementation for the same method. In Java​  It seems you are a new Java developer (because you don't know what are this and super keywords). I don't think you can go right to concurrent and multi thread programming just now. I don't think you can go right to concurrent and multi thread programming just now.

Constructor Name must be same as class name , in your case class name is Bus and you are typing bus in your constructor name.

You can get more info about Constructor here

And second thing is understanding the difference between System.out and System.err.

So, System.out is used to provide the output and to print it in a console you use .println() or print() or whatever you want to use and whatever your give in the print function you will the result in the console as a plain text.

But In System.out, it's different, and yes you will be able to same print() function with System.err but the output you get will in the form of error (in Red color as in Error report). So, They're just used for the identification between custom error message and simple text.

Java Constructer calling by supper() key word make conflict results , Constructor Name must be same as class name , in your case class y) { super(​y); System.out.println("Sub param"); } public bus() { super(11);  Just as the this() construct leads to chaining of constructors in the same class, the super() construct leads to chaining of subclass constructors to superclass constructors. if a constructor has neither a this() nor a super() construct as its first statement, then a super() call to the default constructor in the superclass is inserted.

Your class name is Bus, in your Constructor should have same name as class name, you are having bus as your constructor name, Change it to Bus.

class Bus extends vehicle {

    public bus(int y) {
        System.out.println("Sub param");

    public bus() {
        System.out.println("Sub Class defult");

And from your main function in test change it to :

new Bus();

Your example works fine after that.

Why do this() and super() have to be the first statement in a , In cases where a parent class has a default constructor the call to super is class in Java inherits from Object , objects constructor must be called somehow and it must and also pass the result of a method on that object into super's constructor. an explicit invocation of the direct superclass (by using the keyword "super"). A Java constructor is special method that is called when an object is instantiated. In other words, when you use the new keyword. The purpose of a Java constructor is to initializes the newly created object before it is used. This Java constructors tutorial will explore Java constructors in more detail.

Object orientation, Groovy supports the same primitive types as those defined by the Java Classes are instantiated by calling their constructors, using the new keyword, as in the To create an object by using positional parameters, the respective class needs to class Tasks { Set result = [] void alwaysExecuted() { result << 1 } @OnlyIf({  A constructor in Java is a block of code similar to a method that’s called when an instance of an object is created. Here are the key differences between a constructor and a method: A constructor doesn’t have a return type. The name of the constructor must be the same as the name of the class. Unlike methods,

Xtend - Classes and Members, Xtend is a statically typed programming language sitting on top of Java. An identifier can be escaped with a ^ character in case it conflicts with a keyword. not define a no-argument constructor, you have to explicitly call one using super(​args. abstract class MyAbstractClass() {; def String abstractMethod() // no body; }  I know this is probably a super simple question but I can't seem to figure it out for the life of me. As the title states I just want to call the constructor in the Main Method. class Example{ public static void main (String[] args) { //I want to call the constructor in the mpgCalculator class.

CIT591 O-O Concepts, A class contains one or more constructors for making new objects of that class. If (​and only if) You can write this constructor call explicitly, with super(); as the  Constructor(s) of a class must has same name as the class name in which it resides. A constructor in Java can not be abstract, final, static and Synchronized. Access modifiers can be used in constructor declaration to control its access i.e which other class can call the constructor. Types of constructor. There are two type of constructor in Java:

  • It looks like you are just getting interference between writing to/flushing of the out and err streams. Pick one, write all messages to it.
  • What exactly is your problem? The color of the output? The order of the output?
  • You are using two different output streams - they flush separately and without a defined order.
  • @FinnEggers The order of the output
  • @wthamira that’s because you use two different streams. Programming something runs very fast. So is adding something to a stream. If you use one, they are perfectly ordered. If you use two, one might need longer to process than the other one. That’s it. Only because you put objectA into streamA before you put objectB into streamB does not mean that pbkectA will leave the streamA before objectB does.
  • Thank you. That is the mistake when I put code here. Now it corrected.
  • Whilst you are correct that the constructor must match the class name, it must simply be a transcription error, since the code must have compiled for OP to get output.
  • Thank you. That is the mistake when I put code here. Now it corrected.
  • @wthamira please mark answer as accepted if it helped you and it solved your problem. so that other users can also know about the problem :-)