Compare commits
1 Commits
main
...
nesselwang
Author | SHA1 | Date | |
---|---|---|---|
|
34400fae89 |
BIN
Vortrag/main.pdf
BIN
Vortrag/main.pdf
Binary file not shown.
@@ -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}
|
||||
|
Reference in New Issue
Block a user