Der Typ eines Namens in Java
Der Typ eines Namens in Java
ℛ Statische Typfestlegungen Der Typ einer Variablen legt den Typ fest, den der Name der Variablen hat, wenn man ihn als Ausdruck verwendet. Genauso legt der Rückgabetyp einer Methode den Typ eines Aufrufs jener Methode (als Ausdruck betrachtet) fest.
Der Typ eines Namens ist also ein Ausdrucktyp. (Ein Name kann also jeden Typ als Typ haben, nicht nur eine Klasse.)
Die Auflösung überladener Verben erfolgt über den Typ des Arguments (also des Argumentsausdrucks ).
Main.java
public final class Main
{public static void show( final java.lang.String s )
{ java.lang.System.out.println( "class java.lang.String" ); }public static void show( final java.lang.CharSequence cs )
{ java.lang.System.out.println( "class java.lang.CharSequence" ); }public static void show( final java.lang.Object o )
{ java.lang.System.out.println( "class java.lang.Object" ); }public static void main( final java.lang.String[] args )
{ final java.lang.String s = "abc"; show( s );
final java.lang.CharSequence cs = "abc"; show( cs );
final java.lang.Object o = "abc"; show( o ); }}- Protokoll
class java.lang.String
class java.lang.CharSequence
class java.lang.ObjectMain.java
public final class Main
{public static void show( final java.lang.Object o )
{ java.lang.System.out.println( "class java.lang.Object" ); }public static void show( final java.lang.String s )
{ java.lang.System.out.println( "class java.lang.String" ); }public static void show( final java.io.PrintStream ps )
{ java.lang.System.out.println( "class java.io.PrintStream" ); }public static void main( final java.lang.String[] args )
{ java.lang.Object o;o = "abc"; show( o );
o = java.lang.System.out; show( o ); }}- Protokoll
class java.lang.Object
class java.lang.ObjectMain.java
public final class Main
{public static void show( final java.lang.String s )
{ java.lang.System.out.println( "class java.lang.String" ); }public static void show( final java.lang.CharSequence cs )
{ java.lang.System.out.println( "class java.lang.CharSequence" ); }public static void show( final java.lang.Object o )
{ java.lang.System.out.println( "class java.lang.Object" ); }public static java.lang.String s(){ return "abc"; }
public static java.lang.CharSequence cs(){ return "abc"; }
public static java.lang.Object o(){ return "abc"; }
public static void main( final java.lang.String[] args )
{ show( s() );
show( cs() );
show( o() ); }}- Protokoll
class java.lang.String
class java.lang.CharSequence
class java.lang.Object
Übungsfragen
? Übungsfrage
Welche Ausgabe erzeugt das folgende Programm?
Main.java
public final class Main
{public static void method( final java.lang.Object o )
{ java.lang.System.out.println( "java.lang.Object" ); }public static void method( final java.io.OutputStream os )
{ java.lang.System.out.println( "java.io.OutputStream" ); }public static void method( final java.io.FilterOutputStream os )
{ java.lang.System.out.println( "java.io.FilterOutputStream" ); }public static void method( final java.io.PrintStream ps )
{ java.lang.System.out.println( "java.io.PrintStream" ); }public static void main( final java.lang.String[] args )
{ final java.io.PrintStream printStream = java.lang.System.out;
final java.io.FilterOutputStream filterOutputStream = java.lang.System.out;
final java.io.OutputStream outputStream = java.lang.System.out;
final java.lang.Object object = java.lang.System.out;
method( object );
method( filterOutputStream ); }}