Inheritance & Interfaces Flashcards
Předpis abstraktní třídy s metodou
public abstract class MyClass {
public abstract void m();
}
Co je abstraktní třída/metoda?
Třída obsahující aspoň jednu abstraktní metodu
Metoda bez implementace
Dědící třída ji musí implementovat
Kolik smí třída rozšířit tříd a implementovat interface?
Rozšířit 1, implementovat kolik chce
Předpis interface s metodou
public interface Ifc {
public void method();
}
Druhy inner class
Static - pro tridu
Member - pro instanci
Local - v metode
Anonymous - inline implementace / rozsireni ifc/class
Modifikatory viditelnosti tridy
private - jen ja a moje inner classy
default (=nepise se) - vsichni v mem pkg
protected - vsichni v mem pkg a moji potomci
public - vsichni (v modulu)
Jak se vytvori instance staticke tridy Nested bydlici ve tride Outer
Outer.Nested nested = new Outer.Nested();
Trida Outer obsahujici statickou tridu Nested.
Kdo vidi private veci tridy Nested?
Jak lze takovou tridu s privatnim konstr. instanciovat?
Nested, Outer
Outer.Nested x = Outer.createNestedInstance();
Trida Outer obsahujici statickou tridu Nested.
Kdo vidi private veci tridy Outer?
Outer, Nested
Outer, Nested take, ale jen staticke
vytvareni member inner class
nejprve se musi vytvorit instance outer class
local inner class - hranice existence, jake promenne muze pouzit
existuje jen uvnitr metody
muze pouzit promenne a parametry metody, jen pokud jsou final / efektivne final
Co je efektivne finalni promenna?
Hodnota se priradi jednou a nikdy se nezmeni
Co je functional interface?
Syntax
Ma prave jednu metodu k implementaci
Muze obsahovat i dalsi cleny
nepovinna anotace nad ifc: @FunctionalInterface
Anonymni trida - syntax
var anonymousClass = new ParentClass/Ifc() {
@Override
//method defitintion
}
Anonymni trida - inline syntax pro func. ifc: scitani
var anonymousClass = (a, b) -> a+b;
Co je default implementation metoda v ifc?
Co je jeji opak?
Co muze udelat potomek? (3)
Je to metoda, ktera ma implementaci.
Abstraktni metoda
Nic - zdedi ji
Prepsat - vlastni implementace (povinne, pokud je ve vice mych ifc)
Deklarovat - jako abstraktni, jeho potomek ji musi prepsat
defaultni metoda - syntax
(public) (default) void method() { /* impl */ }
Co je lambda?
Syntax
- nechci menit hodnotu parametru v tele a vracim hodnotu
- vracim hodotu jedinym radkem
Inline implmentace funkcionalniho interface
(x, final String y, final var z) -> { action(x, y, z); return 0; }
(x, y, z) -> 0;
Method reference - syntax (3)
MyClass::method
myInstance::method
MyClass::new (=konstruktor)
public class MyClass {
public int method(String x) { return 0; }
}
preved na method reference
preved na lambdu
MyClass::method
(x) -> 0
Nested member class - syntax
public class Outer {
private/public class Inner {
…
}
}
Nested static class - syntax
public class Outer {
private/public static class Inner {
….
}
}
Local inner class - syntax
public void method(final var p, var q) {
class Inner {
…. // p je videt, q neni
}
Inner inner = new Inner();
}
Interface - jaka klicova slova jsou implicitni pro metodu v ifc, tedy byly vynechany?
void method();
public abstract
Staticka metoda v ifc
Zustava parentovi, vola se:
var result = Ifc.method();
Pri implementaci metody co je dovoleno?
prepsat public na private (zuzit access)
prepsat private na public (rozsirit access)
prepsat private na public (rozsirit access)
Syntax interface - IfcChild, ktere dedi z IfcParent
public interface IfcChild extends IfcParent { }
Stejna metoda v mem rodici a ifc.
Ktera plati?
V rodici (superclass)
Stejna default metoda v mem ifc i v jeho nadrazenem ifc
Ktera plati?
blizsi ifc
Stejna default metoda ve dvou mych ifc
Ktera plati?
Zadna, musim ji prepsat.
public void method() {…}
@Override
public void method() throws Exception { … }
Lze mit pri prepsani jinou vyjimku nez rodic?
Jo
Can interface have instance field?
No
Can interface have final method?
No
Prepsani metody. V cem se muze lisit navratovy typ?
Muze byt subclass navratove hodnoty z puvodni metody