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.加 ...
随机推荐
- PO核准通知界面修改
想在notification頁面把供應商的稅捐代碼帶出來,添在如下紅框中 PO_WF_PO_NOTIFICATION head information:get_po_approve_msg line ...
- 查看Linux下的文件
到了这个时候了,也大概的知道了寄出的Linux的操作,是时候接触一下如何查看文件了.我们常用的有以下几种方式: 1.cat,使用cat命令可以将文件的内容输出到显示屏上,也可以将两个文件结合一起输出. ...
- Linux IPC实践(4) --System V消息队列(1)
消息队列概述 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法(仅局限于本机); 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值. 消息队列也有管道一样的不足: ...
- Tomcat如何实现资源安全管理
在了解了认证模式及Realm域后,我们看看Tomcat是如何设计实现资源安全管理的.在认证模式上,必须要支持多种认证模式,包括Basic模式.Digest模式.Form模式.Spnego模式.SSL模 ...
- listview优化(中)
1,对Imageview使用setTag()方法来解决图片错位问题,这个Tag中设置的是图片的url,然后在加载的时候取得这个url和要加载那position中的url对比,如果不相同就加载,相同就是 ...
- Android开发之初识MVP模式
各位亲爱的小伙伴,有没有想我啊,我胡汉wing又回来了. 很长一段时间没有更新博客..原因是..从离职回到学校以后,一直在享受最后的学生时光(打游戏).. 游戏固然很爽,但是觉得实在很荒废,于是半夜诈 ...
- (NO.00002)iOS游戏精灵战争雏形(五)
完成了精灵自己移动之后,我们开始着手实现按住精灵拖动的功能. 要想处理触摸事件,我们需要做2件事: 1.在类的初始化中打开触摸接收属性 2.实现触摸处理回调方法 我们依次来做这2件事. 首先要搞清楚在 ...
- rambbit mq 安装
https://blog.csdn.net/lmjy102/article/details/78571078 http://www.rabbitmq.com/tutorials/tutorial-on ...
- 19_Android中图片处理原理篇,关于人脸识别网站,图片加载到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
1加载图片到内存 (1).数码相机照片特别是大于3m以上的,内存吃不消,会报OutOfMemoryError,若是想只显示原图片的1/8,可以通过BitmapFactory.Options来实现,具体 ...
- hadoop环境配置过程中可能遇到问题的解决方案
Failed to set setXIncludeAware(true) for parser 遇到此问题一般是jar包冲突的问题.一种情况是我们向java的lib目录添加我们自己的jar包导致had ...