Java面向对象进阶

相关额外的代码待上传。。。


/**
 * 面向对象进阶
 */
package com.org.lxh;


import com.org.lxh.ext.Demo;
import com.org.lxh.impl.AysTest;
import com.org.lxh.impl.Person;
import com.org.lxh.impl.Test;
import com.org.lxh.inter.InterTest;
import com.org.lxh.obj.Address;
import com.org.lxh.obj.ClassA;
import com.org.lxh.obj.Cow;
import com.org.lxh.obj.Dog;
import com.org.lxh.obj.Employee;
import com.org.lxh.obj.OutputInnerClass;


/**
 * @author hemmingway 
 *
 */
public class Chp7 {


	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1、Java没有像C++一样的引用传递,只有值传递
		/*
		 * 
		 * 
		 */
		
		//2、接口和抽象类有什么区别?
		/*
		 * 一个类可以是以实现多个接口。但是只能继承一个抽象类
		 * 定义接口参见 com.org.lxh.inter; 
		 * 实现接口 com.org.lxh.impl
		 * 
		 */
		Test tst = new Test();		//接口使用范例
		tst.doTest();
		
		Demo demo = new Demo();		//抽象类的范例
		demo.doSomething();
		
		
		//3、如何调用父类的构造方法?
		/*
		 * super
		 * 
		 * Dog类中使用super关键字
		 * 
		 */
		Dog d = new Dog();
		System.out.println("Animal的种类是:" + d.name);		 //Animal的种类是:Dog


		Cow c = new Cow();
		System.out.println("Animal的种类是:" + c.name);		 //Animal的种类是:Cow
		
		
		//4、方法的重写
		/*
		 * 
		 */
		d.cry();
		c.cry();
		
		//5、如何操作被隐藏的成员变量和被重写的成员方法?
		/*
		 * 如果想在子类中操作父类中被隐藏的成员变量和被重写的成员方法,也可以使用super关键字。具体格式如下:
		 * super.成员变量名;
		 * super.成员方法名;
		 * 
		 * 例如Dog类中的move()方法中使用super
		 * 
		 */
		d.move();
		
		
		//6、final、finally、finalize有什么区别
		/*
		 * final修饰一个类时,表示最终的类,不能继承的;如果修饰一个变量表示不能修改了;修饰一个方法,表示不可以重写。
		 *
		 * finally用于异常处理,即使前面的代码没有异常,该代码块中的代码也会执行。通常用于资源释放。 
		 * 
		 * finalize是Object类中定义的一个方法,可以重写,用于资源回收。
		 * 
		 */
		d.goHome();		//这个方法在Animal中北final修饰
		
		//7、Java中如何模拟多重继承?
		/*
		 * Java中不支持多重继承,需要使用接口实现
		 * 范例:定义三个借口IPeople、ITeacher和IStudent
		 * Person类实现这三个接口
		 */
		Person p = new Person();
		p.setName("我叫无语");
		p.setSex("男");
		System.out.println(p.teach());
		
		p.setName("琦琦");
		p.setSex("女");
		System.out.println(p.study());
		
		//7、Java克隆对象?
		/*
		 * 1.浅克隆
		 * 相关的类有Address以及Employee
		 * 
		 */
		System.out.println("克隆前(浅克隆)");
		Address address = new Address("China", "Hunan", "Hengyang");
		Employee emp1 = new Employee("hemmingway", 25, address);
		System.out.println("员工1的信息: " + emp1);
		
		Employee emp2 = emp1.clone();
		emp2.setName("washa");
		emp2.getAddress().setCity("zhouzhou");
		System.out.println("员工2的信息: " + emp2);
		
		
		//8. 内部类是否可以被继承?
		/*
		 * 查看类 OutputInnerClass 的示范
		 */
		ClassA a = new ClassA();
		OutputInnerClass oic = new OutputInnerClass(a);
		oic.test();


		
		//9.如何调用内部类和外部类同名的成员?
		/*
		 * 
		 * 
		 */
		
		//10. 什么是匿名内部类?
		/*
		 * 创建一个InterTest接口 
		 * 
		 * AysTest
		 * 
		 */
		AysTest ts = new AysTest();
		ts.showInfo(new InterTest(){
			public void printInfo() {				//匿名内部类的类体
				System.out.println("这里实现接口的方法。。。");
			}
		});
		
	}


}

在这里实现接口的方法,表示like-a关系

这里是继承抽象类,表示is-a关系

Animal的种类是:Dog

Animal的种类是:Cow

汪汪

cow cry....

animal move here....

animal move special type addone!

跑、咬、叫。。。

animal go home!!

姓名:我叫无语教师

姓名:琦琦学生

克隆前(浅克隆)

员工1的信息:姓名: hemmingway,年龄: 25,地址:国家: China,: Hunan,城市: Hengyang

员工2的信息:姓名: washa,年龄: 25,地址:国家: China,: Hunan,城市: zhouzhou

i'am inner class b

这里实现接口的方法。。。

 




你可能感兴趣的:(Java面向对象进阶)