目录
成员变量和局部变量
成员变量是在类里面定义的变量,局部变量是在方法里面定义的变量;
成员变量又分为实例变量和类变量,用static修饰的就是类变量,不用static修饰的变量就是实例变量;
与成员变量不同的是,局部变量必须初始化之后才能访问它,不然就会出错;、
包
包(package) 是组织类的一种方式,使用包的主要目的是保证类的唯一性.例如:你在代码中写了一个 Test 类. 然后你的舍友也可能写一个 Test 类. 如果出现两个同名的类, 就会冲突, 导致代码不能编译通过。
Java已经帮我们提供了很多现成的类供我们使用,我们在调用他们的时候使用import语句来导入包;
使用 import static 可以导入包中的静态的方法和字段.
将类放到包中
基本规则:在文件的最上方加上一个 package 语句指定该代码在哪个包中
包名需要尽量指定成唯一的名字, 通常会用域名的颠倒形式(例如 com.bit.demo1 ).
包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.
如果一个类没有 package 语句, 则该类被放到一个默认包中
详细请看包;
Java的常见包:
java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
java.lang.reflect:java 反射编程包;
java.net:进行网络编程开发包。
java.sql:进行数据库开发的支持包。
java.util:是java提供的工具程序包。(集合类等) 非常重要
java.io:I/O编程开发包
这些包现在不用太过于了解,后面会随着学习的深入继续了解
继承
继承是面向对象的三大特征之一,也是实现软件复用的重要手段,Java的继承有单继承的特点,每个子类只有一个直接父类;
Java的继承通过extends来实现,实现继承的类是子类,被继承的类是父类;比如水果和苹果的关系,苹果继承了水果,苹果是水果的子类,则苹果是一种特殊的水果;
父类的范围要比子类的大,可以认为父类是大类,子类是小类;
Java里面子类继承父类的语法格式如下:
修饰符 class Wife extends girlfriend_1{ //类定义部分; }在这里wife是你定义的子类的类名,girlfriend_1是父类的类名;
具有继承关系的子类和父类:子类具有父类的全部成员变量,方法和内部类(包括内部接口和枚举),值得提出的是,子类不能继承父类的构造器;
这里面Wife类是girlfriend类的子类;
既然学了继承,那我们就要知道如何去重写父类的方法;
重写父类其实很简单,就是要注意“两同两小一大”规则,“两同”即方法名相同,形参列表相同;“俩小”指的是子类方法返回值类型应该比父类的要小或者相等;“一大”指的是子类方法的访问权限要比父类大或者相等;
这里,我在Wife类里面重写了wedding方法 ,原本的girlfriend类里面的wedding方法输出的是女朋友,但是经过重写后,变成了妻子;
使用super调用父类中重写的方法、访问父类中被隐藏的字段
当你想要调用父类中被重写的方法,就可以通过super关键字来实现,super和this一样都不能出现在static修饰的方法中;
多态
先看下面代码:
package xuexi1;
public class girlfriend_1 {
public String girlfriend="李思敏";
public void base(){
System.out.println("父类的普通方法!");
}
public void text(){
System.out.println("父类被覆盖的方法!");
}
}
class Wife extends girlfriend_1{
//类定义部分;
public String girlfriend="王丹";
public void text(){
System.out.println("子类覆盖父类的方法!");
}
public void sub(){
System.out.println("子类的普通方法!");
}
public static void main(String[] args) {
girlfriend_1 a=new girlfriend_1();
System.out.println(a.girlfriend);
a.base();
a.text();
Wife b=new Wife();
System.out.println(b.girlfriend);
b.base();
b.text();
girlfriend_1 c=new Wife();
System.out.println(c.girlfriend);
c.base();
c.text();
//c.sub;
}
}
其中创建了三个引用变量a,b,c;其中a,b编译时类型和运行时类型完全相同,但是c编译时类型为girlfriend,但是他在引用时类型为Wife类型这就会出现多态了;下面是多态的一些特点;
- 多态的前提1:是继承
- 多态的前提2:要有方法的重写
- 父类引用指向子类对象,如:Animal a = new Cat();
- 多态中,编译看左边,运行看右边
强制类型转换
1.基本类型的强转:只能在数值类型之间进行,这里所说的数值类型包括整形,字符型和布尔型;但是要注意的是,数值类型类型和布尔类型之间不能相互转换;
2.引用类型之间的转换只能在具有继承关系的两个类之间转换,如果试图将一个父类类型的实例转换成子类实例;
为了能够更好的了解类型转化,我看见一个讲的比较好的博客;
向上转型和向下转型
instanceof
用来判断一个对象是否是一个类或者其子类,实现类的实例,如果是则返回true,否则返回false;
使用格式:
对象名 + instanceof + 类名
多态的使用
前提:多态对象把自己看做是父类类型
- 成员变量: 使用的是父类的
- 成员方法: 由于存在重写现象,所以使用的是子类的
- 静态成员: 随着类的加载而加载,谁调用就返回谁的
组合
组合和继承都是实现类复用的手段,他们两个个有个的优点和缺点;