java面向对象下_2(day10)

abstract关键字

    

 

匿名类的使用

package com.atfqs.java1;
/*
 * 抽象类的匿名子类的使用
 * 
 */
public class PersonTest {
	public static void main(String[] args) {
		
		PersonTest.method1(new Teacher());//非匿名的类 匿名对象 
		
		Worker worker = new Worker();//非匿名的类 非匿名的对象
		method2(worker);
		
		//创建一匿名的类的对象
		Person p = new Person(){//不是Person类,没有名,借用了Person的名。
			@Override
			public void sleep() {
				System.out.println("匿名类 非匿名的对象 sleep");
			}
		};
		method2(p);
		
		//
		method2(new Person(){
			@Override
			public void sleep() {
				System.out.println("匿名类 匿名对象 sleep");
		        }
			});
	}
	public static void method1(Teacher s){
          System.out.println("method()!");		
	}
	public static void method2(Person p){
        p.sleep();	
	}	
}
class Worker extends Person{

	@Override
	public void sleep() {
		System.out.println("Worker sleep");
	}
	
}

多态的应用:模板方法设计模式(TemplateMethod)

 比如:数据库访问的封装

            JUnit单元测试

            JavaWeb的Servlet中关于doGet|doPost方法的调用

            Hibernate中模板程序

            Spring中JDBCTemlate、Hibernate Template

接口(interface     implements

           通过接口可以实现多继承(一个类可以实现多个接口)

           接口就是规范,定义的是一组规则,不是is a的关系  是能不能的关系

           接口的本质是契约标准规范。就像我们的法律一样,制定好后,大脚都要准守

 

package com.atfqs.java1;
/*
 *  接口的多态性的使用
 */
public class USBTest {
	public static void main(String[] args) {
		Computer c = new Computer();
		//  1  接口的非匿名接口实现类的非匿名对象
		Flash flash = new Flash();
		c.transferData(flash);//接口的多态性
		//  2  接口的非匿名实现的匿名对象	
		c.transferData(new Printer());
		//  3  接口的匿名实现类的非匿名对象
		USB phone = new USB(){
			@Override
			public void start() {
				System.out.println("Phone start work!");				
			}
			@Override
			public void end() {
				System.out.println("Phone end work!");			
			}			
		};
		c.transferData(phone);
		//  4 接口的匿名实现类的匿名对象
		 c.transferData(new USB(){
			@Override
			public void start() {
				 System.out.println("mp3 start work!");
			}
			@Override
			public void end() {
				 System.out.println("mp3 start work!");		
			}			 
		 });
	}
}
class Computer{
	public void  transferData(USB usb){
		usb.start();
		System.out.println("working!");//传数据
		usb.end();
	}
}
interface USB{
	void start();
	void end();
}
class Flash implements USB{
	@Override
	public void start() {
	    System.out.println("Flash start work!");
	}
	@Override
	public void end() {
        System.out.println("Flash end work!");	
	}	
}
class Printer implements USB{
	@Override
	public void start() {
	    System.out.println("Printer start work!");
	}
	@Override
	public void end() {
        System.out.println("Printer end work!");	
	}
}

 

 

接口的应用:代理模式(Proxy)

 

package com.atfqs.java1;
/*
 * 代理模式的举例
 */
public class NetWorkTest {
	public static void main(String[] args) {
		ProxyServer proxyServer = new ProxyServer(new Server());
		proxyServer.browse();
	}
}
interface NetWork{
	public void browse();
}
//被代理类
class Server implements NetWork{

	@Override
	public void browse() {
       System.out.println("真实的服务器访问网络!");		
	}
	
}
//代理类
class ProxyServer implements NetWork{
	private NetWork work;
	public ProxyServer(NetWork work){
		this.work = work;
	}
    public void check(){
    	System.out.println("联网前检验工作");
    }
	@Override
	public void browse() {
		check();
		work.browse();
	}	
}

        自行了解工厂模式

内部类     

package com.atfqs.java2;
/*
 * 类的成员:内部类
 * java 中可以将类A定义在类B中,则类A为内部类 类B为外部类
 * 成员内部类(静态、非静态)   vs  局部内部类 (方法内  代码块内 构造器内)
 * 成员内部类:
 *      一方面:  作为外部类的成员  
 *              调用外部类的结构 
 *              可以用static修饰  
 *              可被四种权限修饰符
 *     
 *      一方面:作为一个类 :
 *               类中可以定义相关属性 方法 构造器
 *               可用final修饰 可用abstract修饰
 * **************************************************
 * 如何实例化成员内部类的对象
 * 
 * 如何在成员内部类中区分调用外部类的结构
 * 开发中局部内部类的使用 
 * 局部内部类:
 */
public class InnerClassTest {
	public static void main(String[] args) {
		//创建静态成员内部类
		Person.Dog dog = new Person.Dog();
		dog.eat();
		
	   //创建非静态成员内部类
		Person p = new Person();
		Person.Bird bird = p.new Bird();
		bird.eat();
	}

}
class Person{
	String name;
	int personId = 1001;
	
	public void sing(){
		System.out.println("perosn is sing"+personId);
	}
	
	//静态成员内部类
	static class Dog{
		String name;
		public void eat(){
			System.out.println("class dag eat!");
		}
	}
	//非静态成员内部类
	final class Bird{
		String name;
		public Bird(){
			
		}
		public void eat(){
//			Person.this.sing();//调用外部类的结构====>sing();
			System.out.println("class bird eat!");
		}
		public void show(String name){
			System.out.println(name);//形参
			System.out.println(this.name);//内部类的成员属性
			System.out.println(Person.this.name);//外部类的属性
		}
	}
	
	
	//局部内部类
	public Person(){
		class CC{
			
		}
	}
	public Compareable getCompare(){
		
//		//创建一个实现Compareable 接口的局部内类
//		class MyCompareable implements Compareable{
//			
//		}
//		return new MyCompareable();
		
		
//		//创建一个实现Compareable 接口的局部内类
		return new Compareable(){
			//创建匿名局部内部类
		};
		
	}
	public void method(){
		class AA{}
	}
	
	
	{
		class BB{}
	}
	
}
interface Compareable{
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值