java静态多态实例_Java笔记7-多态父类静态

多态的应用-面向父类编程

1.对象的编译时类型写成父类

2.方法的返回类型写成父类

3.方法的参数类型写成父类

编译时类型:对象的声明时类型,在于编译期间

运行时类型:new运算符后面的类型

编译时类型决定了对象的访问能力

运行时类型决定了对象真正的行为能力

--------------------------------------------------------------------------------

将打印图形面积和周长的业务方法封装到一个业务类当中ShapeBiz.java

//输出圆的周长

public void circleGirth(Circle c){

System.out.println(c.girth());

}

//输出矩形的周长

public void rectGirth(Rect r){

System.out.println(r.girth());

}

.....

采用面向父类编程-方法的参数类型可以写成父类

只需要在业务类当中定义一个方法,就可实现输出任意图形的周长或者面积

public void girth(Shape s){//此处可以传入Shape的任意一个子类对象

System.out.println(s.girth());

}

public void area(Shape s){

System.out.println(s.area());

}

练习:把输出Employee员工的工资的方法封装到输出员工工资的业务类中

--------------------------------------------------------------------------------------

传入一个参数,返回某一个父类的具体的子类的实例

培训师父类 Trainer.java

->会计培训师 AccountTrainer.java

->游泳培训师 SwimmingTrainer.java

->程序员培训师 ProgrammingTrainer.java

定义一个方法:返回某一个类的具体的实例

public static AccountTrainer getInstance(){

return new AccountTrainer();

}

java.util.Calender

定义一个类:TrainerFactory.java

public class TrainerFactory{

//定义一些静态常量属性

public static final int ACCOUT = 0;

public static final int SWINM = 1;

public static final int PROGRAM = 2;

//面向父类编程-方法的返回类型写成父类

public static Trainer getInstance(int type){

Trainner t = null;

switch(type){

case ACCOUNT:

t = new AccountTrainer();

break;

case SWINM:

t = new SwinmmingTrainer();

break;

case PROGRAM:

t = new ProgrammingTrainer();

break;

default:

}

return t;

}

}

以上就是简单工厂设计模式!!!

------------------------------------------------------------------------------

static:静态的

属性:静态属性,它是类拥有的,是所有的对象共享的

语法:

普通变量前面加上一个static

static int id;

注意:static是不能够来修饰局部变量的

public void method(){

int id = 10;

static int id = 20;//error

}

静态属性初始化的时机:

JVM加载类的时候,就会优先对静态属性分配空间并且进行初始化工作

非静态属性,是在每次创建对象的时候才会进行空间分配以及初始化工作!

普通域

int id = 10;

static id = 100;

static应用之:可以生成自增的整数型id

方法:

static修饰的方法叫做静态方法

静态方法的调用:

1.静态方法中可以直接调用静态方法,但是不能够直接调用非静态方法

如果非要调用非静态方法,则需要先创建对象

2.静态方法的调用可以直接通过类名.方法名

为什么main是定义成静态的?

1.因为main是主线程,程序的主入口,由JVM来调用的

根据JVM规范,要将main设置成静态的

一般工具类当中的方法要定义成static,方便调用

java.util.*

java.lang.Math

为什么我们不将所有的资源都定义成静态的呢?

因为静态资源在类加载的时候就会被加载进内存,如果静态资源过多

肯定会占用大量的内存空间,而这部分的资源并不一定都是经常用到的!

静态导入:import static xxx.xxx.xxx;

可以直接使用静态导入的类中的静态常量

而不需要使用类名.常量名

静态内部类[以后再说]

代码块(block)

普通代码块:

{

//每次创建对象的时候都会优先执行

//但是注意一般在程序当中不会出现普通代码块

//它一般都会被移植到构造块中

}

静态代码块:

static{

//是类加载的时候就会立即优先加载

}

类进JVM活动过程:

1.JVM加载需要执行的类

2.给所有的静态成员分配空间

3.对静态成员进行初始化工作

4.调用静态代码块

5.如果创建了对像

5-1 给所有的非静态成员分配空间

5-2 初始化所有的非静态成员

5-3 调用普通代码块

5-4 调用构造方法

-----------------------------------------------------------------------

static应用之单例模式(Simple Pattern)

作用:在应用程序当中,保证某个类的具体实例有且只有1个

三个步骤:

1.私有化构造-不让外界new

2.提供这个类的本身的唯一实例作为该类的静态属性存在着

3.提供一个公开的静态的方法来返回这个类的唯一实例

单例模式:

1.饿汉模式

2.懒汉模式

public class Singleton{

//1.私有化构造

private Singleton(){

System.out.println("构造方法被调用!");

}

//2.提供这个类的本身的唯一实例作为该类的静态属性存在着

private static Singleton instance= new Singleton();

//3.提供一个公开的静态的方法来返回这个类的唯一实例

public staitc Singleton getInstance(){

return instance;

}

}

Test.java

Singleton s1 = Singleton.getInstance();

Singleton s2 = Singleton.getInstance();

s1==s2;//true

-----------------------------------------------------------------------------

Final关键字:

1.final修饰的方法不能够被重写

2.final修饰的类不能够被其他类继承

我们可以用final关键字来阻断继承

3.final修饰的局部变量叫做常量

1.命名由大写字母以及_组成

2.可以先声明一个常量,然后再对该常量进行赋值

但是一旦赋值成功将不能够再改变!

3.在声明的时候同时进行赋值

4.一旦赋值成功,将不能够改变

4.修饰属性:final修饰的属性叫做常量属性

一般会结合static public一起使用

称之为:公开的静态的常量属性

1.声明的时候要同时进行赋值

2.不可先声明,然后再进行赋值,除非使用静态代码块进行赋值

3.命名也是同上

4.一旦赋值成功将不再改变!!!

==================================================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值