package java7;
class Simple{
String s;
public Simple(String si){ s = si;}
public String toString(){return s;}
public void setString(String sNew){ s = sNew;}
}
class Second{
Simple simple;
String s;
public Second(String si){s = si;}
public void check(){
if (simple == null)
System.out.println("not Initialized");
else
System.out.println("initialized");
}
private Simple lazy(){
if (simple == null) {
System.out.println("Creating Simple");
simple = new Simple(s);
}
return simple;
}
public Simple getSimple(){ return lazy();}
public String toString(){return lazy().toString();}
public void setSimple(String sNew){
lazy().setString(sNew);
}
}
public class E01 {
public static void main(String[] args) {
Second second = new Second("Init String");
second.check();
System.out.println(second.getSimple());
second.check();
System.out.println(second);
second.setSimple("New String");
System.out.println(second);
}
}
package java7;
public class E02 extends Detergent{
public void scrub(){
append("E02.scrub()");
}
public void sterilize(){
System.out.println("this is sterilize");
}
public static void main(String[] args) {
E02 e02 = new E02();
e02.scrub();
System.out.println(e02);
e02.sterilize();
}
}
package java7;
class Cartoo extends Drawing{
public Cartoo() {
System.out.println("Cartoo constructor");
}
}
public class E03 {
public static void main(String[] args) {
new Cartoo();
}
}
练习4
package java7;
class Base1{
public Base1() {
System.out.println("Base1");
}
}
class Derived1 extends Base1{
public Derived1() {
System.out.println("Derived1");
}
}
class Derived2 extends Derived1{
public Derived2() {
System.out.println("Derived2");
}
}
public class E04 {
public static void main(String[] args) {
new Derived2();
}
}
练习5
package java7;
class A{
public A() {
System.out.println("A()");
}
}
class B{
public B() {
System.out.println("B()");
}
}
class C extends A{
B b = new B();
}
public class E05 {
public static void main(String[] args) {
new C();
}
}
练习7:
package java7;
class A2{
public A2(String s) {
System.out.println("A2()" + s);
}
}
class B2{
public B2(String s) {
System.out.println("B2()" + s);
}
}
class C2 extends A2{
B2 b;
public C2(String s) {
super(s);
b = new B2(s);
}
}
public class E07 {
public static void main(String[] args) {
new C2("hello");
}
}
练习8
package java7;
class ji{
public ji(int i) {
System.out.println("ji");
}
}
class ji2 extends ji{
public ji2() {
super(1);
System.out.println("jiji");
}
public ji2(int i) {
super(i);
System.out.println("feiji");
}
}
public class E08 {
public static void main(String[] args) {
new ji2();
new ji2(2);
}
}
练习9:
package java7;
class Component1{
public Component1() {
System.out.println("Component1");
}
}
class Component2{
public Component2() {
System.out.println("Component2");
}
}
class Component3{
public Component3() {
System.out.println("Component3");
}
}
class Root{
Component1 c1 = new Component1();
Component2 c2 = new Component2();
Component3 c3 = new Component3();
public Root() {
System.out.println("Root");
}
}
class Stem extends Root{
Component1 c1 = new Component1();
Component2 c2 = new Component2();
Component3 c3 = new Component3();
public Stem() {
System.out.println("Stem");
}
}
public class E09 {
public static void main(String[] args) {
new Stem();
}
}
package java7;
class Component1{
public Component1() {
System.out.println("Component1");
}
public void dispose(){
System.out.println("Component Dispose");
}
}
class Component2{
public Component2() {
System.out.println("Component2");
}
public void dispose(){
System.out.println("Component Dispose");
}
}
class Component3{
public Component3() {
System.out.println("Component3");
}
public void dispose(){
System.out.println("Component Dispose");
}
}
class Root{
Component1 c1 = new Component1();
Component2 c2 = new Component2();
Component3 c3 = new Component3();
public Root() {
System.out.println("Root");
}
public void disepose(){
System.out.println("Root dispose");
c3.dispose();
c2.dispose();
c1.dispose();
}
}
class Stem extends Root{
Component1 c1 = new Component1();
Component2 c2 = new Component2();
Component3 c3 = new Component3();
public Stem() {
System.out.println("Stem");
}
public void disepose(){
System.out.println("Stem dispose");
c3.dispose();
c2.dispose();
c1.dispose();
}
}
public class E09 {
public static void main(String[] args) {
new Stem().disepose();
}
}
练习13:创建一个类,它应带有一个被重载了三次的方法 。继承产生一个新类,并添加一个该方法的新的重载定义,展示这四个方法在导出类中都是可以使用的。
package java7;
class Lei{
public void f(int i){
System.out.println("f(int i)");
}
public void f(char c){
System.out.println("f(char c)");
}
public void f(double d){
System.out.println("f(double d)");
}
}
class Jicheng extends Lei{
public void f(String s){
System.out.println("f(String s)");
}
}
public class E13 {
public static void main(String[] args) {
Lei lei = new Lei();
lei.f(1);
lei.f(1.0);
lei.f('s');
//lei.f("hello");
}
}
package java7;
class Engine{
public void start(){}
public void rev(){}
public void stop(){}
}
class Ser extends Engine{
public void service(){
System.out.println("Service for you!");
}
}
class Wheel{
public void inflate(int psi){}
}
class Window{
public void rollup(){}
public void rolldown(){}
}
class Door{
public Window window = new Window();
public void open(){}
public void close(){}
}
public class Car {
public Ser engine = new Ser();
public Wheel[] wheel = new Wheel[4];
public Door left = new Door(),right = new Door();
public Car() {
for (int i = 0; i < 4; i++) {
wheel[i] = new Wheel();
}
}
public static void main(String[] args) {
Car car = new Car();
car.left.window.rollup();
car.wheel[0].inflate(72);
car.engine.start();
car.engine.service();
}
}
用该protected方法。
package java7;
import java7.protect.E15_Pro;
class Derived extends E15_Pro{
public void g(){
f();
}
}
public class E15 {
public static void main(String[] args) {
// new E15_Pro().f();
new Derived().g();
}
}
package java7;
class Amphibian{
public void move() {
System.out.println("Move");
}
}
class Frog1 extends Amphibian{}
public class Frog {
public static void main(String[] args) {
Amphibian a = new Frog1();
a.move();
}
}
package java7;
class Amphibian{
public void move() {
System.out.println("Move");
}
}
class Frog2 extends Amphibian{
public void move(){
System.out.println("Frog");
}
}
public class Frog {
public static void main(String[] args) {
Amphibian a = new Frog2();
a.move();
}
}
package java7;
class SelfCounter{
private static int count;
private int id = count++;
@Override
public String toString() {
return "SelfCounter{" +
"id=" + id +
'}';
}
}
class WithFinalFields{
final SelfCounter scf = new SelfCounter();
static final SelfCounter scsf = new SelfCounter();
@Override
public String toString() {
return "WithFinalFields{" +
"scf=" + scf +
'}' + "scsf = " + scsf;
}
}
public class E18 {
public static void main(String[] args) {
System.out.println("First object:");
System.out.println(new WithFinalFields());
System.out.println("second object:");
System.out.println(new WithFinalFields());
}
}
package java7;
class WithBlankFinalField{
private final Integer i;
public WithBlankFinalField(Integer i) {
this.i = i;
}
public Integer getI() {
return i;
}
}
public class E19 {
public static void main(String[] args) {
WithBlankFinalField wbff = new WithBlankFinalField(10);
System.out.println(wbff.getI());
}
}
package java7;
class WithFinalMethod{
final void f(){}
}
public class E20 extends WithFinalMethod{
//void f(){}不可以
public static void main(String[] args) {
}
}
不可以继承
练习23:
package java7;
class LoadTest{
static {
System.out.println("Loading LoadTest");
}
static void staticMember(){}
}
public class E23 {
public static void main(String[] args) {
System.out.println("Calling static member");
LoadTest.staticMember();
System.out.println("Creating an object");
new LoadTest();
}
}
练习24:
package java7;
class JapaneseBeetle extends Beetle{
int m = printInit("JapaneseBeetle.m initialized");
JapaneseBeetle(){
System.out.println("m = " + m);
System.out.println("j = " + j);
}
static int x3 = printInit("static JapaneseBeetle.x3 initialized");
}
public class E24 {
public static void main(String[] args) {
new JapaneseBeetle();
}
}
final和类初始化这一块没太看懂