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自制浏览器WebView-android学习之旅(64)
简单讲解如何使用WebView加载百度的网页 acticity代码 public class MainActivity extends Activity { private WebView webVi ...
- Spring boot之hello word
环境准备 一个称手的IDE(首选Myeclipse,也可以选Eclipse) Java环境(JDK 1.7或以上版本) Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用I ...
- Linux多线程实践(9) --简单线程池的设计与实现
线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.所以 ...
- 小强的HTML5移动开发之路(19)——HTML5 Local Storage(本地存储)
来自:http://blog.csdn.net/dawanganban/article/details/18218701 一.浏览器存储的发展历程 本地存储解决方案很多,比如Flash SharedO ...
- Python基础 语法特别注意笔记(和Java相比)
Python变量和数据类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ...
- Android必知必会--NinePatch图片制作
本文为CSDN学院免费课程<NinePatch图片制作从入门到精通>的笔记,建议新手先观看视频,整理此笔记是为了便于自己复习,有NinePatch基础的朋友可以直接观看第四部分.--[转载 ...
- quartz实现定时功能实例详解(servlet定时器配置方法)
Quartz是一个完全由java编写的开源作业调度框架,下面提供一个小例子供大家参考,还有在servlet配置的方法 Quartz是一个完全由java编写的开源作业调度框架,具体的介绍可到http:/ ...
- java中log的应用
log的简单应用 备忘 加入jar包commons-logging-1.1.jar log4j.properties 如下(就放在src根目录底下 名字和位置都不要变) #OFF.FATAL.ERRO ...
- Callable与Future
本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...
- TCP的核心系列 — 重传队列的更新和时延的采样(一)
重传队列实际上就是发送队列(sk->sk_write_queue),保存着发送且未确认的数据段. 当有新的数据段被确认时,需要把这些段从重传队列中删除,同时更新一些变量,包括 packets_o ...