java面向对象——多态、设计模式、代码块

来源:互联网 发布:qa软件 编辑:程序博客网 时间:2024/06/07 05:54

面向对象——多态

一、定义:一个对象可以有多种形态。

二、前提:

  • 需要存在继承或者实现关系(多态是对象的概念,和类没有关系);
  • 要有覆盖操作。

三、多态的特点:

  •  把子类对象赋给父类变量,在运行时期会表现出具体的子类特征(父类或者接口的引用指向或者接收自己的子类对象);
  • 成员变量:只看引用变量所属的类;
  • 成员函数:编译时,要查看引用变量所属的类中是否有调用的成员。运行时,要查看对象所属的类中是否有所调用的成员

四、作用:

  • 多态的存在提高了程序的扩展性和后期可维护性(屏蔽不同子类对象之间的实现差异);
  • 降低耦合度;

五、引用类型转换:

SuperDemo sd  = new SubDemo();//向上转型以后,如果父子都有相同函数,访问函数子类的函数sd.test1();//注意:当向上转型以后,只能访问父类和子类共有的方法SubDemo sd1 = (SubDemo)sd;//向下转型sd1.test2();//向下转型必须先向上转型Fruit f = new Apple();Orange o = (Orange) f;//不行

注意:判断某一个对象是否是某一种类型:instanceof运算符:

boolean result =对象 instanceof类名/类型

设计模式

一、单例设计模式:

class  JavaDemo{public static void main(String[] args) {//单例:单个实例//System.out.println("Hello World!");//new SingleDemo();/*SingleDemo sd1 = SingleDemo.getSD();System.out.println(sd1);SingleDemo sd2 = SingleDemo.getSD();System.out.println(sd2);*/SingleDemo1 sd3 = SingleDemo1.getSD();System.out.println(sd3);SingleDemo1 sd4 = SingleDemo1.getSD();System.out.println(sd4);}}class SingleDemo{//饿汉式private static SingleDemo sd = new SingleDemo();private SingleDemo(){}public static SingleDemo getSD(){return sd;}}class SingleDemo1{//懒汉式private static SingleDemo1 sd;private SingleDemo1(){}public static SingleDemo1 getSD(){if(sd==null){sd = new SingleDemo1();return sd;}else{return sd;}}}
二、工厂设计模式:

class  FactoryDemo{public static void main(String[] args) {Fruit f = null;f = Factory.get("橘子");f.eat();}}interface Fruit{public void eat();}class Apple implements Fruit{public void eat(){System.out.println("吃苹果");}}class Orange implements Fruit{public void eat(){System.out.println("吃橘子");}}class Factory//工厂类{public static Fruit get(String name){Fruit f = null;if("苹果".equals(name))//这里不能把name写在前面,否者会出现空指针异常{f = new Apple();}if("橘子".equals(name)){f = new Orange();}return f;}}
三、代理模式(保护核心业务):

class  ProxyDemo{public static void main(String[] args) {ProxyCl p = new ProxyCl(new Real());p.browse();}}interface Net{public void browse();}class Real implements Net//真真实现功能的类{public void browse(){System.out.println("上网了");}}class ProxyCl implements Net//代理类,代理类可以实现更多的辅助功能{private Net net;public ProxyCl(Net net){this.net = net;}public boolean check(){boolean inf = true;return inf;}public void browse(){this.check();this.net.browse();}}

四、适配器模式:

在继承接口时,就必须全部实现接口中的方法,这样很多用不到的也要实现很麻烦,所有就有适配类的出现,即用一个抽象类并用抽象类里的空方法体来实现接口中所有方法,然后从这个抽象类中继承,就可以有选择的实现相关方法


代码块

一、代码块:在程序中(/方法),使用{}括起来的一段代码.

二、而根据代码块存在的位置,和修饰符,分三类:

   在代码块中定义的变量的的作用范围,就只在该代码块有效.

1):局部代码块:在方法中定义的代码块,一般的表现为if,while,for等语句.

2):初始化代块(构造代码块):在类中直接定义,和方法是平行关系.用来做初始化操作.在创建该初始化代码块所在类的对象的时候,执行,创建N个对象,则执行N.

     创建对象时,优先于构造器执行.开发中,不推荐使用,即使要在创建对象的时候做初始化操作,我们一般在构造器中完成即可.

3):静态代码块:

  使用static修饰的初始化代码块.

  当静态代码块所在类的字节码被加载进JVM,就立马执行静态代码块,而且只会执行一次.

  一般的,做静态资源的初始化,加载文件,加载资源,静态代码块优先于main方法执行----->main方法,是在字节码被加载进JVM之后,再调用的.


public static void main(String[] args) {//代码块/*{int a = 3;System.out.println("代码块:"+a);}*///int a = 3;//System.out.println(a);new TestDemo3();new TestDemo3();new TestDemo3();}}class TestDemo3{{System.out.println("普通代码块!");}//静态代码块,比普通代码块要快,比构造函数要快,并且只会调用一次。static{System.out.println("静态代码块!");}public TestDemo3(){System.out.println("无参数的构造函数!");}}





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