Compare commits

1 Commits

Author SHA1 Message Date
julian
34400fae89 nesselwang 2025-03-12 21:39:17 +01:00
2 changed files with 72 additions and 5 deletions

Binary file not shown.

View File

@@ -5,6 +5,7 @@
\usepackage{bookmark}
\usepackage{pgfplots}
\usepackage[ngerman]{babel}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{amssymb} % Add the amssymb package to fix missing font shape
\usepackage{listings}
@@ -14,7 +15,6 @@
\lstset{
basicstyle=\ttfamily\scriptsize,
keywordstyle=\bfseries,
commentstyle=\color{green!50!black},
escapeinside={(*@}{@*)},
numbers=left,
@@ -28,6 +28,21 @@
tabsize=4
}
\lstdefinestyle{java}{
language=Java,
basicstyle=\ttfamily\small,
keywordstyle=\color{blue}\bfseries,
stringstyle=\color{red},
commentstyle=\color{gray}\itshape,
numberstyle=\tiny\color{gray},
numbers=left,
stepnumber=1,
tabsize=4,
showstringspaces=false,
breaklines=true,
frame=single
}
%Information to be included in the title page:
\title{Java-TX Compiler in Java-TX}
@@ -280,10 +295,10 @@ var3 = 10.0F;
\end{columns}
\end{frame}
\begin{frame}[fragile]{Überschreiben von Methoden II}
\begin{frame}[fragile]{Überschreiben von Methoden I}
\begin{itemize}
\item In Java: Methoden nicht anhand von Rückgabewert überschreibbar
\end{itemsize}
\end{itemize}
\begin{lstlisting}[language=java]
public class Bar {
int foo(Object obj){return 0;}
@@ -297,10 +312,62 @@ Bar.java:3: Fehler: Methode foo(Object) ist bereits in Klasse Bar definiert
^
\end{lstlisting}
Aber: Generell auf JVM lauffähig
\begin{itemize}
\item Aber: Generell auf JVM lauffähig
\item Methodenaufrufe werden im Bytecode anhand der Parameter und des Rückgabewerts definiert
\end{itemize}
\begin{lstlisting}[language=java]
15: invokevirtual #16 // Method add:(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Exkurs: Kovariantes Methoden Überladen I}
Seit Java 5: Überschreiben einer Methode möglich, wenn:
\begin{itemize}
\item Argumenttypen exakt übereinstimmen
\item Rückgabetyp muss ein Subtyp des Rückgabetyps der Supermethode sein
\end{itemize}
z.B. clone() von Object
\begin{lstlisting}[language=java]
class Object{
...
protected Object clone() { ... }
}
public class EmptyClass{
@Override
public EmptyClass clone(){
return new EmptyClass();
}
}
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Exkurs: Kovariantes Methoden Überladen II}
\begin{itemize}
\item Implementierung mittels automatisch generierter Bridge Methode
\item Methoden unterscheiden sich lediglich im Rückgabetyp
\end{itemize}
\begin{lstlisting}
public EmptyClass clone();
Code:
0: new #7 // class EmptyClass
3: dup
4: invokespecial #9 // Method "<init>":()V
7: areturn
// Bridge Method
public java.lang.Object clone() throws java.lang.CloneNotSupportedException;
Code:
0: aload_0
1: invokevirtual #10 // Method clone:()LEmptyClass;
4: areturn
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]{Überschreiben von Methoden II}
@@ -452,4 +519,4 @@ public interface Function<T, R> {
\end{tikzpicture}
\end{center}
\end{frame}
\end{document}
\end{document}