java类的种类
1.this
this指向当前对象。
public class HelloWorld{
String name = "桔子桑";
public void call(){
System.out.println(this.name);
}
}
2.java中的几种类
我们知道如何去定义一个类,在此基础上,还有子类、内部类。
class BaseClass{//父类 }
class newClass extends BaseClass{//子类 }
这个子类newClass继承了父类的所有属性和方法,并且还额外拥有自身的属性和方法。
public class Wrap {
public class InnerClass{
public void say(){
System.out.println("内部类的方法");
}
}
//程序入口
public static void main(String[] args) {
// TODO Auto-generated method stub
Wrap hi = new Wrap();// 实例化外部类
InnerClass hello = hi.new InnerClass();//实例化内部类,注意写法
hello.say();
}
}
以上就是如何定义(成员)内部类以及调用。
3.内部类的种类
成员内部类:上一条所提到的内部类就是成员内部类,所谓成员内部类,
就是说这种类的级别同等于成员变量和方法,它们是属于同一级别的;
作为一个类,它是可以有自己内部的变量和方法的,成员内部类内部也是可以定义变量和方法的;
内部类访问外部类的变量,采用 外部类名.this.外部类成员变量名,例如:OuterClass.this.name;
外部类方法访问内部类变量或者方法,采用OuterClass outer = new OuterClass();
InnerClass inner =outer.new InnerClass();获取内部类对象,
然后inner.name;或者inner.say();访问变量和方法。
静态内部类:静态内部类就是一般的内部类加上static修饰符;
因为是静态的,所以只能直接访问静态变量和方法,这一点java学习笔记03第5条讲到过,
不记得的可以再回顾一下;
要访问非静态变量和方法,要先实例化一个变量所在类的实例,然后再通过 实例.静态变量名 访问。
方法内部类:就是内部类定义在外部类的方法中;
方法内部类只能在该方法内部使用,所以不能使用访问控制符(public等)和修饰符(static);
就像是局部变量,在方法外部是无法访问的。
4.类的继承
上面所说的子类实际上就是类的继承;
采用extends关键字,子类继承了父类的属性和方法;
如果子类对于父类的方法不满意,可以修改方法,但是定义方法的形式不可作任何更改,即方法重写。
创建子类对象时,初始化顺序为:父类属性初始化-->父类构造方法-->子类属性初始化-->子类构造方法。
5.super的使用
super指向该子类的父类对象,相当于为我们简化了实例化父类对象的步骤;
BaseClass base = new BaseClass();这个super就相当于这里的base;
base.name和super.name是等价的。
6.Object类
java中所有我们自己定义的类其实都有一个相同的父类,那就是Object类;
所以我们定义的类都具有Object类的方法和属性,例如:toString()方法、equals()方法,当然,
我们是可以在自定义类中对这些方法进行修改以达到自己想要的效果。
7.多态
多态是建立在继承的基础上的,现在有一个父类Father和一个子类Son;
它们都有一个同名方法say(),当然内容不一样,可以看做是子类对父类的方法重写;
另外Son还有一个自己独有的方法hi();
Father father = new Father(); //父类的引用指向父类对象(引用多态)
Father son = new Son(); //父类的引用指向子类的对象(引用多态)
father.say(); //这个语句是可行的(方法多态),访问的是父对象的方法
son.say(); //这个语句也是可行的(方法多态),访问的是子对象的方法
son.hi(); //这个语句是不可行的
总结:只有在某种方法(方法体可以不同)同时存在于引用类和对象类的前提下,
才能对其进行调用。
8.引用类型转换
引用类型转换分为向上转换、向下转换;依旧使用上面的例子
Son son1 = new Son(); //子类的引用指向子类的对象
Father son2 = son1; //父类的引用指向子类的对象,这里的son就相当于new Son();
这种父类的引用指向子类的对象就是向上类型转换;
可以这么理解,子类是继承于父类的,它可以人为地添加一些父类没有的属性或方法,
所以,子类的容积是大于父类的,那么现在将父类的引用(一碗水)放到/指向子类的对象(一桶水),
是不存在任何问题的,所以向上类型转换是不存在任何问题的。
Son son3 = son2; //子类的引用指向采用父类引用的对象,可以看到son2是采用了父类的引用
这种子类的引用指向采用父类引用的对象就是向下类型转换;
虽然这个对象是一个子类对象,但是它采用了父类的引用,编译器认为这种引用类型转换是存在风险的,
要解决这个问题,就要人为地将这个对象声明为子类引用(强制转换);
Son son3 = (Son)son2;
instanceof,返回值为布尔型,检验两者是否是同一个对象,即是否能够真正实现强制转换;
Father son4 = new Father();
son1是一个采用Son类引用的Son对象;
son2是一个采用Father类引用的Son对象;
son4是一个采用Father类引用的Father对象;
son2 instanceof Son;因为son2是个Son对象所以返回值为True,Son son3 = (Son)son2这种强制转换是有效的;
son4 instanceof Son;因为son4是个Father对象,所以该返回值为False,Son son3 = (Son)son4这种强制转换是无效的。
9.抽象类
定义一个抽象类采用abstract关键字;
public abstract class Father{
public abstract void call();
public abstract void say();
}
抽象类内的方法也采用abstract关键字,且没有方法体;
继承(extends)了抽象类的子类会自动创建抽象类内部的方法。
10.接口Interface
接口可以理解为一个特殊的抽象类,习惯在命名上以大写的 I 字母打头;
public abstract interface Itodo{
public abstract void call();
}
接口中的abstract关键字我们通常是不用写明的,虽然不写但系统会帮我们自动添加的;
那如何为一个类实现接口的功能呢,这里采用implements关键字;
public class Son extends Father implements Itodo{
@Override
public void call(){
// TODO Auto-generated method stubs
System.out.println("该类继承了Father类并实现接口Itodo");
}
}
Father类和接口Itodo之间并无任何联系。
java类的种类的更多相关文章
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- 浅谈java类集框架和数据结构(1)
在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...
- JAVA 类总结
JAVA 类总结 最近看了遍java内部类相关的一些内容,做一些总结.与个人博客 zhiheng.me 同步发布,标题: JAVA 类总结. 顶级类与嵌套类 定义在某个类(或接口,下同)内部的类,称为 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- java类载入器——ClassLoader
Java的设计初衷是主要面向嵌入式领域,对于自己定义的一些类,考虑使用依需求载入原则.即在程序使用到时才载入类,节省内存消耗,这时就可以通过类载入器来动态载入. 假设你平时仅仅是做web开发,那应该非 ...
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...
- jvm系列(一):java类的加载机制
java类的加载机制 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装 ...
- java类与实例
最近在看设计模式,感觉自己对java的三大特性的理解不够清晰,搞不清楚抽象类.接口.泛型的用处和优缺点.设计模式学了一半,想着还是停下来脑补一下java的基础,就从java对象开始吧. 一.java对 ...
- oracle调用JAVA类的方法
导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加 ...
随机推荐
- Android项目-高考作文功能简介(一)
前言 : 开发安卓也已2年多了近3年了, 在自己刚入行的时候就有自己独立开发一个App的想法. 后来自己做了<<高考作文>>这一App. 后面续续断断的维护者. 也因为功能简 ...
- Block高级用法:Block传值UI_12(3)
1.简单复习Block的定义.赋值.调用做学习传值铺垫: //声明一个函数 无返无参void printfHello(int a);//函数的实现void printfHello(int a){ ...
- 多线程爬虫Miner
多线程爬虫Miner 需要配置项:1.URL包含关键字.2.存储方式:DB-数据库存储;FILE-文件存储.3.爬取页面最大深度.4.下载页面线程数.5.分析页面线程数.6.存储线程数. ------ ...
- unity shaderlab Blend操作
原文链接: http://www.tiankengblog.com/?p=84 Blend混合操作是作用于在所有计算之后,是Shader渲染的最后一步,进行Blend操作后就可以显示在屏幕上.shad ...
- 《java入门第一季》之eclipse快捷键
Eclipse快捷键大全(转载) Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当 ...
- Xcode中通过删除原先版本的程序来复位App
可以在Xcode菜单中点击 Product->Clean Build Folder (按住Option键,在windows键盘中是Alt键.) 此时Xcode将会从设备中删除(卸载uninsta ...
- VisualSVN Server安装过程
运行VisualSVN-Server-2.7.3.msi程序, 如下图 点击Next, 下一步 选中 I accept选项, 点击Next, 下一步 选择默认配置, 服务和控制台组件方式, 点击 ...
- Java学习笔记(二)事件监听器
Java实现对组件事件(如单击.输入等)的监听和JavaScript类似,都是先添加Listener,再写触发函数,不同的是,Java实现监听前必须使用implements将各个接口添加到类内. 相关 ...
- rhel6.4 安装nodejs和Mysql DB服务
rhel6.4 安装nodejs和Mysql DB服务 安装好redhat6.4虚拟机后, 安装软件: # yum install gcc-c++ openssl-devel Loaded plugi ...
- Linux网络设置(第二版) --互联网寻址过程
Linux网络设置 --互联网寻址过程 1.TCP/IP与OSI参考模型比较 TCP/IP OSI 物理层 网卡 数据链路层 * MAC地址 网络层 IP,ICMP,ARP协议 传输层 TCP,UDP ...