Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
JAVA PROGRAMMING PART IV INHERITANCE Inheritance is a form of software reusability in which new classes are created from existing classes by absorbing their attributes and behaviors and adding new capabilities the new classes require. Newly created classes of objects are derived by absorbing characteristics of existing classes and adding unique characteristics of their own KEYWORD Given Class A, and we want to define class B that derive from Class A we used keyword “extends” as Class B extends A { //definition of class B } Super class & Sub Class Class A : parent class/base class/super class Class B : child class/extended class/sub class A { class void printA() {System.out.println(‘A’);} } class B extends A { void printB() {System.out.println(‘B’);} } Relationship Sub Classes inherit all member (data&method) from its Super Class except The private member of Super Class Constructor of Super Class class InheritTest1 { public static void main(String args[]) { A x = new A(); x.printA(); B y = new B(); y.printA(); y.printB(); } } A A B KEYWORD “FINAL” For break extends class class A { int a = 1;} class B extends A { int b = 2; } final class C extends B { int c = 3; } class Inherit2 { public static void main(String args[]){ C z = new C(); System.out.println(z.a+z.b+z.c); } } 6 REFERENCE class A {int x;} class B {int y;} a A a = new A(); B b = new B(); b x x y Try it! class A { int x = 1;} class B extends A { int y = 2; } class Inherit3 { public static void main(String args[]) { A a = new A(); System.out.println(a.x); B b = new B(); System.out.println(b.x + “,” + b.y); b.x--; // b = a; 1 a = b; 1, 2 System.out.println(a.x); 0 } } Package class โดยปรกติจะจัดเก็บต่อหนึง่ ไฟล์ .class อยู่แลลว เเื่่อตอน compile โปรแลกรื เป็ นแลหล่งจัดเก็บ class ต่าง ๆ ที่เกี่ยเขว องกันไเว ที่เดียเกัน ใน package หนึง่ สาืารถืี class ไื่จากัด ใน package สาืารถืี subpackage อีกเท่าใดก็ไดว ปรกติที่เราจัดเก็บไฟล์จาวาไว้ใน ไดเรกทอรี่ Myjava ดังนั้นเรี ยกได้วา่ ไฟล์ได้อยูใ่ น package Myjava Packages Standard Packages ใน JDK 1.2.x อยูใ่ นไฟล์ rt.jar แลละ i18n.jar ซึง่ อยูใ่ น C:\JDK1.2x\JRE\LIB java.applet java.awt java.beans java.io java.lang java.math java.net java.rmi java.security java.sql java.util Package เราสาืารถใชว class จาก package อ่่นไดว โดยการ import ไเว ที่ ส่เนหัเโปรแลกรื เช่น import import import import java.awt.Button; java.awt.Graphics; javax.swing.JApplet; java.awt.*; Keyword เราใชว keyword “package” ในการระบุเา่ class ของเราอยู่ใน package ใด package myPackage; public class A { public void print() { System.out.println(“This’s class A”); } } จัดเก็บไฟล์ไว้ที่ C:\Myjava\myPackage Package สาืารถเรี ยกใชว class A ไดว 2 แลบบ ค่อ class PackageTest1{ public static void main(String args[]){ new myPackage.A().print(); } } import myPackage.A; class PackageTest2{ public static void main(String args[]){ new A().print(); } } Scope of Visibility in Extended Classes Accessible to public protecte d default privat e Same class, Same Package ☺ ☺ ☺ ☺ Sub class, Same package Other class, Same package ☺ ☺ ☺ ☻ Sub class, Other package ☺ ☺ ☻ ☻ Other class, Other package ☺ ☻ ☻ ☻ Same Class, Same Package package p1; Class One { public String pub = “pub”; protected String pro = “pro”; String def = “def”; private String pri = “pri”; public void print() { System.out.println(pub+pro+def+pri); } } Sub Class, Same Package package p1; Class SubCsameP extends One { public void print() { System.out.println(pub+pro+def); } } Other Class, Same Package package p1; Class OtherCsameP extends One { public void print() { One o = new One(); System.out.println(o.pub+o.pro+o.def); } } Sub Class, Other Package package p1; Class SubCotherP extends p1.One { public void print() { System.out.println(pub+pro); } } Other Class, Other Package package p1; Class OtherCotherP { public void print() { p1.One o = new p1.One(); System.out.println(o.pub); } } Constructor Chaining เื่่อืีการสรว าง instance ของคลาสลูกขึ ้น constructors ของ คลาสบรรพบุรุษทังฟืก ้ จะถูกทางาน class A {A() {System.out.println(“A”);}} class B extends A { B() {System.out.println(“B”);} } Class ConstructorChain { public static void main(String args[]) { new B();} } A B Super Reference class A { int a; void print() { System.out.println(a);} } class B extends A { int a; B(int x, int y){super.a = x; this.a = y;} void print() { super.print(); System.out.println(a);} } class Super1{ public static void main(String args[]){ B b = new B(1,2); b.print(); } } 1 2 Super Reference ใชว keyword เ่า “super” แลทน class ที่ inherite เพ่่อใชว ใน การอว างถึง member ของ super class ในการอว าง super จะหืายถึงตัเ data member ตัเแลรกที่เจอใน สายของบรรพบุรุษ เช่น A B C int x Ext A Ext B int x Super.x This.x Super Constructors class A { A() { System.out.println(‘A’);} A(char c) { System.out.println(c); } } class B extends A { B() { // super(‘a’); System.out.println(‘B’); } } class SuperConstructor { public static void main(String args[]){new B();} } Shadowing ถว าเรากาหนด data member ในคลาสลูกืีช่อเหื่อนกับ data member ในคลาสแลื่ ช่่อของลูกจะบัง(shadow)ช่่อในคลาสแลื่ class A {int x = 1;} class B extends A {float x = 2.0f;} class shadowing { public static void main(String args[]) { B b = new B(); System.oout.println(b.x); } } overriding ถว าเรากาหนด method ในคลาสลูกืี signature เหื่อนกับ method ในคลาสแลื่ พฤติกรรืของลูกจะลบลว าง (override)พฤติกรรืในคลาสแลื่ class A {void print() {print.out.println(‘A’);}} class B extends A { void print() {print.out.println(‘B’); } class Overriding { public static void main(String args[]) { new B().print(); } }