第十三讲 继承、方法重写与super、final关键字、抽象类与接口、Object类、工厂和静态代理模式

来源:互联网 发布:java 兼职 编辑:程序博客网 时间:2024/05/18 02:32

导读

继承:其实说白了就是代码的重用组件(代码段组合)。使用继承可以用子类完成父类的任务,并且子类可以完成自己的业务。意思其实已经很明确了,在生活上,子女可以继承父母的财产。


方法重写:重写,是基于继承关系的基础上的。所谓重写,其实就是覆盖的意思,我把方法全部更改了代码体的内容。比如,我有一个方法register注册方法是用来注册QQ,但我重写了之后register方法则可以用来注册百度。


final关键字:修饰属性和修饰方法以及修饰类,所以含义都有所不同。


抽象类:是一个类的模板,那么这样说的话会有些迷茫,就说它是一张设计图纸的话,这样会对理解有很好的把握。它可以有方法实现体,所以要求实现类不一定要全部实现它里面定义的所有方法。


接口:这个跟抽象类不一样,它是一种规范。每一个实现类都必须实现它里面所有的方法,因为它里面的方法全部都是抽象方法来的。


Object类:所有Java类都直接或者间接地继承它,所以这些类都拥有它的方法。我们介绍它的常用方法。


工厂模式:其实就是因为策略模式的劣势而诞生的一种新型的设计模式。工厂模式很节省资源的,用户需要什么样的对象工厂就会创建什么样的对象给它。


代理模式:所谓代理,其实就是第三方角色。可以这么说吧,我们把房屋中介作为第三方机构,那么我们作为租客,房主在外地的时候可以不通过直接接洽来跟我们谈,而    让中介直接与我们谈,就可以了。中介充当了一个代办的角色了。


继承:

class Father

{

String name; 

}

// 上面这个类是作为父类的角色

 class Son extends Father

{

// Son作为Father的子类,则拥有了Father的属性与方法。

}

// 实现如下

Father father = new Father();

father.name= "张三“; // 张小明的父亲

Son son = new Son();

son.name = "张小明"; // 张小明自己


尽管Son类中没有定义name属性,但由于使用了extends关键字实现了类的继承技术,所以Son对象拥有了Father的name属性——


方法重写:

class Car

{

public void run()

{

System.out.println("Car 在run...”);

}

}


class Benz extends Car

{

@Override

public void run()

{

System.out.println("benz 在run....");

}

}


上面的代码就是Benz类的run方法重写了Car中的run方法——

final修饰属性:这个属性就变成了常量,不允许二次赋值。

final int count = 10;

count = 20 ;// 错误,因为count已经变成了常量,不允许再次赋值了。


final修饰方法:这个方法所在的那个类,如果有子类,那么它的子类是不能重写这个final方法的,而只能重载它!!因为重载的本质是使用,而重写的本质是改写。

final void request()

{

// 这个方法只能被其子类的对象的request方法是重载的,而不能是重写——

}


final修饰类:被这个关键字修饰的Java类是一个终态类,即:该类没有子类的。

final class MyTools

{

// 建议把这些方法都定义为static的,这样一来调用就很方便了。

}


Object类,这个类是所有Java类的父类来的。

equals方法:比较两个对象是否相等,但有一个前提条件:

①、如果是字符串对象,那么它在源码里面就重写了equals方法,所以比较的是两个字符串对象的内容是否相等。

②、如果是Object类型的对象,必须要重载equals方法才能比较两个对象的内容是否相等,否则的话还是比较两个对象的地址是否指向同一个目标。


hashCode方法:该方法返回这个对象在哈希表中存储的位置,它是一个整数@十六进制的数值。

【一般而言,重写了equals方法就必须要重写hashCode方法,这样一来可以更好地实现两个对象之间的比较!】


工厂模式

// 根据传递进来的名称的类型来生成不同的对象——

public Object createObject(String name)

{

if(name.equals("apple"))

{

return  new Apple();

}

else if(name.equals("banana"))

{

return new Banana();

}

else(

return null;

)

}

class Apple

{

String name = "apple";

}

class Banana

{

String name = "banana";

}


代理模式——

interface Subject

{

pubic void request(String name , String things);

}


class RealSubject implements Subject

{

@Override

public void request(String name , String things)

{

System.out.println(name + " ->" + things);

}

}


public class Result 

{

private Subject subject ;

public Result(Result result)

{

this.result = result ;

}

public void request(String name , String things)

{

result.request(name,things);

}

}


阅读全文
0 0
原创粉丝点击