La classe astratta funziona come una classe madre, che verrà estesa dalla sua sottoclasse. Il metodo della sottoclasse sovrascriverà il metodo astratto della classe astratta.
abstract class libri { // definisce una classe astratta
abstract int lettura( ); // definisce un metodo astratto
}
class eBooks extends libri{ // estende la classe madre
int lettura( ){ return 100; } //sovrappone il metodo astratto
}
abstract class |libri|{ // definisce una classe astratta
abstract int |lettura|( ); // definisce un metodo astratto
}
class |eBooks| extends |libri|{ // estende la classe madre
int |lettura|( ){ return |100|; } //sovrappone il metodo astratto
}
package mioPackage;
abstract class libri{// definisce una classe astratta
abstract void lettura(); // definisce un metodo astratto
}
class eBooks extends libri{ // estende la classe madre
void lettura(){ //sovrascrive il metodo astratto
System.out.println("Sovrascrive il metodo astratto!");
}}
public class EsempioAstrazione {
public static void main(String[] args){
eBooks obj =new eBooks();
obj.lettura();
}}
package |mioPackage|;
abstract class |libri|{// definisce una classe astratta
abstract void |lettura|( ); // definisce un metodo astratto
}
class |eBooks| extends |libri|{// estende la classe madre
void |lettura|( ){ //sovrascrive il metodo astratto
System.out.println("Sovrascrive il metodo astratto!");
}}
public class |EsempioAstrazione|( )
|EsempioAstrazione| {
public static void main(String[] args){
|eBooks| |obj| =new |eBooks|();
|obj|.|lettura|( );
}}
Java ha i seguenti quattro modificatori di autorizzazione per definire un membro: 1 predefinito, 2 pubblico, 3 privato, 4 protetto
Livelli | 1 | 2 | 3 | 4 |
|
Default | Pubblico | Privato | Protetto |
Stessa classe | V | V |
V | V |
stesso package classe Madre |
V | V |
X | V |
stesso package sottoclasse |
V | V |
X | V |
package diverso classe Madre |
X | V | X | X |
package diverso sottoclasse |
X | V | X | V |
Nello stesso pacchetto ci sono 2 files
a) File1 di mioPackage
Public class |ClasseMadre|{
int |num|=|100|;// Questo è membro predefinito- default member
}
b) file2 di myPackage
package |mioPackage|;
public class SubClass extends |ClasseMadre|{
public static void main(String[] args) {
SubClass |s|=new SubClass( );
System.out.print ( |s|.|num| ); /* s referenzia num nello stesso package, ok! */
}
}
È possibile accedere a un membro pubblico da qualsiasi pacchetto o classe, specialmente in pacchetti diversi.
Prendiamo due files in due pacchetti diversi come segue:
a) File1 di mioPackage
Package |mioPackage|;
public class |ClasseMadre|{
public int |num|=|100|; // Questo è un membro pubblico.
}
a) File2 di NovoPackage
Package |novoPackage|;
import |mioPackage|.|ClasseMadre|;
public class SubClass extends |ClasseMadre|{
public static void main(String[] args) {
SubClass |s|=new SubClass( );
System.out.print ( |s|.|num| ); /* s referenzia num in un package diverso, ok! */un
}
Non si può accedere a un membro privato da una classe diversa, ma solo dalla stessa che lo contiene.
class |miaClasse| {
private |miaClasse|{ // costruttore
System.out.println(“|Questo metodo è privato!|”);
}}
public class |novaClasse|{
public static void main ( String args [ ] ) {
|miaClasse| obj = new |miaClasse| ( ); ///* Errore! Accesso a costruttore privato*/
}}
private member can be accessed by the same class.
package |mioPackage|;
public class |nostraClasse| {
private int |a| = |100|; // dichiara una variabile privata
private int |b| = |200|; // dichiara una variabile privata
public void |VariableAccesso| ( ){
System.out.println(" |a =|" + |a|); // accede a una variabile privata
System.out.println(" |b =|" + |b|); // accede a una variabile privata
}}
public class |PrivatoEsempio| {
public static void main ( String args [ ] ){
|nostraClasse| obj = new |nostraClasse| ( ); /* OK! accede aun costruttore predefinito */
obj.|VariableAccesso|( );
}}
un membro protetto è accessibile da qualsiasi sottoclasse.
Esempio
qui di séguito abbiamo 2 files in diversi package:
a)file1 di mioPackage
package |mioPackage|;
public class |ClasseMadre|{ // Classe Madre
protected int |num|=|100|; // num è un membro protetto
}
b) file2 di NovoPackage
package |novoPackage|;
import |mioPackage|.|ClasseMadre|;
public class |SottoClasse| extends |ClasseMadre| { //sottoclasse
public static void main(String[] args) {
|SottoClasse| |s|=new |SottoClasse|( );
System.out.print (|s|.|num| ); //accede a un membro protetto .
}
}
Spiegazione
L'interfaccia è una classe speciale, che contiene uno o più metodi vuoti che verranno implementati da un metodo della classe.
interface |libri| { // definisce una interfaccia
int|numerolibro|( ); // definisce un metodo vuoto
}
class |eBooks| implement |libri| { //implementa l'interFaccia
public int |numerolibro| ( ) { // implementa un metodo vuoto
return |100|;
} }
package mioPackage;
interface libri// definisce una interfaccia
{public void numerilibri();} // definisce un metodo vuoto
class eBooks implements libri//implementa l'interFaccia
{public void numerilibri ()// implementa un metodo vuoto
{System.out.println("Implementa il metodo vuoto!");}}
public class EsempioInterface {
public static void main(String[] args) {
eBooks obj = new eBooks();
obj.numerilibri();
}}
package |mioPackage|;
interface |libri|// definisce una interfaccia
{public void |numerilibri|();} // definisce un metodo vuoto
class |eBooks| implements |libri|//implementa l'interFaccia
{public void |numerilibri| ( )// implementa un metodo vuoto
{System.out.println("Implementa il metodo vuoto!");
}}
public class |EsempioInterface|{
public static void main(String[] args) {
|eBooks| obj = new |eBooks|();
obj.|numerilibri|();
}}
abstract class |libri|{ // definisce una classe madre astratta
int |lettura|( );} // definisce un metodo astratto
class |eBooks| extends |libri|{ //estende la classe madre aggiungendo ebooks
int |lettura|( )
{ return …; } }// sovrascrive il metodo astratto
interface |libri|{ // definisce un'interface
int |numerolibro|( ); // definisce un metodo vuoto
}
class eBooks implement |libri|//implementa l'interface aggiungendo ebooks
{public int |numerolibro|( )// implementa il metodo vuoto
Quando si crea un oggetto, è necessario un costruttore per inizializzare le variabili.
class libro { // definisce una classe
public String titolo;
public int numero;
public libro ( ) { // definisce un costruttore della classee
titolo = “Learning Java ”; // inizializzazione
numero = 100; // inizializzazione
}}
public class Editore { // // definisce una classe pubblica main
public static void main ( String args [ ]) { // metodo della classe main
Libro eBook = new libro ( ); // crea un oggetto
System.out.print( eBook.titolo + eBook.numero);
}}
class |libro| { // definisce una classe
public String |titolo|;
public int |numero|;
public |libro| ( ) { // definisce un costruttore della classee
|titolo| = “Learning Java ”; // inizializzazione titolo
|numero| = 100; // inizializzazione numero
}}
public class |Editore|{ // // definisce una classe pubblica main
public static void main ( String args [ ]) { // metodo della classe main
Libro |eBook| = new |libro| ( ); // crea un oggetto
System.out.print(|eBook|.|titolo| +|eBook|.|numero|);
}}
"public libro ( ) {... variabili.., }" è un construttore che serve per attribuire alle variabili i valori iniziali .
La classe principale (main) può utilizzare un'altra classe per chiamare un altro metodo.
class UnaltraClasse { // definisce una classe
public static void UnaltroMetodo ( ){ // definisce metodo della classe
System.out.print ( “Very Good” ); }
}
public class MainClass { // definisce una classe pricipale
public static void main (String args [ ]){ // definisce metodo della classe
UnaltraClasse.UnaltroMetodo( ); // UnaltraClassechiama UnAltro metodo
}}
( Output: Very Good )
class |UnaltraClasse|{ // definisce una classe
public static void |UnaltroMetodo| ( ){ // definisce metodo della classe
System.out.print ( “|Molto Buono|” ); }
}
public class |MainClass| { // definisce una classe pricipale
public static void main (String args [ ]){ // definisce metodo della classe
|UnaltraClasse|.|UnaltroMetodo|( ); // UnaltraClasse chiama UnAltro metodo
}}
Start up Eclipse > Select “myPackage” > new > class > name > DemoAstratta > Finish.
package mioPackage;
abstract class A { // definisce una classe abstract
abstract int max(int x, int y); // definisce un metodo abstract
int min(int x, int y){
return x<y?x:y;
}}
class B extends A{ // definisce una classe B che estende la classe A
int max(int x, int y){ // sovrascrive il metodo abstract
return x>y?x:y;
}}
public class DemoAstratta {
public static void main(String[] args) {
A a;
B b=new B();
int max=b.max(100, 200);
int min=b.min(100, 200);
System.out.println("Max="+max);
System.out.println("Min=" +min);
}}
package |mioPackage|;
abstract class |A|{ // definisce una classe abstract
abstract int max(int |x|, int |y|); // definisce un metodo abstract
int min(int |x|, int |y|){
return |x|<|y|?|x|:|y|;
}}
class |B| extends |A| { //definisce una classe B che estende la classe A
int max(int |x|, int |y|){ // sovrascrive il metodo abstract
return |x|>|y|?|x|:|y|;
}}
public class DemoAstratta {
public static void main(String[] args) {
|A||a|;
|B| |b|=new |B|( );
int max=|b|.max(100, 200);
int min=|b|.min(100, 200);
System.out.println("|Max=|"+max);
System.out.println("|Min=|" +min);
}}
Fate clic sul pulsante verde col triangolo bianco nella barra degli strumenti per eseguire il programma e vedere l'output:
Start up Eclipse > Select “mioPackage” > new > class > name > DemoInterfaccia > Finish.
package mioPackage;
interface miaInterface{ // definisce un'interfaccia
public void comparaNumeri(int num1, int num2); /* definisce un metodo vuoto */
}
class NumMax implements miaInterfaccia{ // implementa l'interfaccia
public void comparaNumeri(int num1, int num2){ /* implementa il metodo vuoto */
System.out.println("Tra due numeri: "+num1+" & "+num2);
if (num1>=num2)
System.out.println("Massimo è:"+num1);
else
System.out.println("Massimo è:"+num2);
}
}
class NumMin implements miaInterfaccia{ // implementa l'interfaccia
public void comparaNumeri(int num1, int num2){
System.out.println("Tra due numeri: "+num1+" & "+num2);
if (num1<=num2)
System.out.println("Minimo è:"+num1);
else
System.out.println("Minimo è:"+num2);
}
}
public class DemoInterfaccia {
public static void main(String[] args) {
NumMax ObjectMax = new NumMax();
maxObject.comparaNumeri(100, 120);
NumMin ObjectMin = new NumMin();
minObject.comparaNumeri(60, 80);
package |mioPackage|;
interface |miaInterfaccia|{ // definisce un'interfaccia
public void |comparaNumeri|(int |num1|, int |num2|); /* definisce un metodo vuoto */
}
class NumMax implements |miaInterfaccia|{ // implementa l'interfaccia
public void |comparaNumeri|(int |num1|, int |num2|){ /* implementa il metodo vuoto */
System.out.println("|Tra due numeri:|"+|num1|+" & "+|num2|);
if (|num1|>=|num2|)
System.out.println("|Massimo è:|"+|num1|);
else
System.out.println("|Massimo è:|"+|num2|);
}
}
class NumMin implements |miaInterfaccia|{ // implementa l'interfaccia
public void |comparaNumeri|(int |num1|, int |num2|); {
System.out.println("|Tra due numeri:|"+|num1|+" & "+|num2|);
if (|num1<=|num2)
System.out.println("|Minimo è:|"+|num1|);
else
System.out.println("|Minimo è:|"+|num2|);
}
}
public class |DemoInterfaccia|{
public static void main(String[] args) {
|NumMax| ObjectMax = new |NumMax|();
maxObject.|comparaNumeri|(100, 120);
|NumMin| ObjectMin = new |NumMin|();
minObject.|comparaNumeri|(60, 80);
Fate clic sul pulsante verde col triangolo bianco nella barra degli strumenti per eseguire il programma e vedere l'output: