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{
}