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.一旦赋值成功将不再改变!!!
==================================================================================================
Java笔记7-多态父类静态的更多相关文章
- Java特性之多态父类与子类之间的调用
问题描述: Java三大特性,封装.继承.多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用.下面是一个测试类,源代码如下: package com.test; public c ...
- Java面向对象之多态的静态和动态实现
简单而言: 静态多态:即为重载,方法的重载 动态多态:即为重写/覆盖,方法的重写
- Java 多态 父类和子类方法的访问控制权限
Java 多态 父类和子类方法的访问控制权限 @author ixenos 父类和子类方法的访问控制权限 继承是为了扩展类的功能,而这种扩展显然就是对一个原始类的扩展,目的还是向上转型来调用,所以这就 ...
- Thinking in Java 笔记
大二就买了这本书,如今再看这本书,看到了一些以前没看的细节,也有了不同的体会.本文使用第4版,整理每章的笔记心得.老外的书有个特点,他会花费大量的文字去阐述一个概念,这比堆代码强多了. 第 1 章 对 ...
- java笔记整理
Java 笔记整理 包含内容 Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...
- Java中的多态
1.多态:具有表现多种形态的能力的特征 父类: public abstract class Animal {public abstract void Say();} 子类: public class ...
- java封装和多态
封装.集成.多态和抽象是java的基本特征. 封装的第一步就是对类进行组装,即定义一个类,这时候要考虑这个类要有哪些属性.方法等.第二步就是信息的隐藏,这包括访问修饰符.get/set方法和某些特定方 ...
- java面向对象之 多态 Polymorphism
多态(Polymorphism):用我们通俗易懂的话来说就是子类就是父类(猫是动物,学生也是人),因此多态的意思就是:父类型的引用可以指向子类的对象. 1.多态的含义:一种类型,呈现出多种状态 主要讨 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
随机推荐
- Adapter 启动时报错
如果把Adapter安装到C盘,有时在启动Adapter的时候会抛出java.io.IOException: Cannot run program "C:\tibco\adapter\adr ...
- C++小项目:directx11图形程序(五):shadersclass
这个类是用来创建着色器并设置输入布局的. 这个类比较特殊,它创建的着色器与Effect文件有关,effect文件是用高级着色语言(hlsl)编写的. shadersclass.h #pragma on ...
- Linux——【转】gcc编译与gdb调试简要步骤
原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...
- EasyUI ComboGrid的绑定,上下键和回车事件,输入条件查询
首先我们先看一下前台的绑定事件 1.先定义标签 <input id="cmbXm" type="text" style="width: 100p ...
- The Managed Metadata Service or Connection is currently not available 分类: Sharepoint 2015-07-09 13:28 5人阅读 评论(0) 收藏
Does the following error message looks familiar to you? (When you go to Site Actions –> Site Sett ...
- sja1000T can相关的知识
开发环境:硬件环境arm9200 sja1000T,软件环境kernel version 2.6.21.驱动程序:字符驱动 can有两种基本的工作模式:basic can .pelican,pelic ...
- 第一次用golang写个小程序
1.下载go1.6并安装.我是win7系统(会自动添加GOOROOT环境变,自己建一个放go文件的工程目录并添加到环境变量中) 2.下载liteide并解压缩.(liteide查看菜单中也可编辑环境变 ...
- ini配置文件格式
转自:http://blog.sina.com.cn/s/blog_6988593e0101e6i4.html 程序没有任何配置文件,那么它对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码 ...
- Jacoco入门
Jacoco介绍 转自:wangmuming 的博客 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaA ...
- Large Margin DAGs for Multiclass Classification
Abstract We present a new learning architecture: the Decision Directed Acyclic Graph (DDAG), which i ...