类、对象
定义:具有相同属性和行为的对象的统称。
对象:类的某一具体代表
属性:对象具有的各种特征
行为:对象能够进行的操作
定义类的步骤:
1.定义类名(类名首字母必须大写)
2.编写类的属性
3.编写类的方法
如:public class Foo{
属性1 值1,属性2 值2;
public void 方法名(){
//方法体
}
}
使用对象的步骤
1.创建对象
类名 对象名 = new 类名 ();
Animal dog = new Animal();
2.使用对象
引用对象的属性:对象名. 属性
dog.age=2; //给age属性赋值
引用对象的方法:对象名.方法名()
dog.eat(); //调用eat()方法
成员变量和局部变量
1.成员变量:
在类中定义,描述类将具备什么
2.局部变量:
在类的方法中定义,在方法中临时保存数据
区别:
1.作用域不同
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类内部
2.初始值不同
Java会给成员变量赋一个初始值,不会给局部变量赋初始值
3.同名问题
在同一方法中,不允许有同名的局部变量(同一类)
在不同的方法中,允许有同名的局部变量(同一类)
4.优先级
当局部变量与成员变量同名时,局部变量有优先级
构造方法:
1、使用“new+构造方法“可以创建一个对象
2.通常使用构造方法初始化对象
3构造方法名与类同名且没有返回值
构造方法的语句格式:
public 构造方法名(){
//初始化代码
}
a.无参的构造方法(创建类的实例化,即对象)
b.有参的构造方法(作用:为成员变量赋值)
public Animal(string newName.int newAge){
name=newName;
age=newAge;
}
特点:
1)当没有指定构造方法,系统会自动地添加无参的构造方法
2)当有构造方法,无论是有参还是无参的,系统都不会自动添加无参的构造方法
3)构造方法的重载:
方法名相同,但参数不同的多个方法,调用时自动根据不同参数选择象印的方法
4)构造方法给对象的属性赋值时,会赋一个合理的值
注意:如果没有无参的构造方法,系统会自动创建无参的构造方法;如果有一个有参的构造方法,此时需要我们手动创建一个无参的构造方法!
static
静态成员(类成员):被static修饰的成员,属于整个类,不属于某个单独的对象。
访问方式:
a.使用类名直接访问(类名.静态成员)
b.使用对象名访问(对象名.静态成员)
静态方法(类方法):被static修饰的方法
访问方式:
a.使用类名直接访问(类名.静态方法)
b.使用对象名访问(对象名.静态方法)
静态初始化块
static {
}
只能为静态变量赋值,且仅在类加载时执行,仅执行一次。
当存在初始化块、静态初始化块、构造方法时,输出顺序为:静态初始化块.>初始化块>构造方法。
封装
概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
好处:提高程序安全性,增加代码重用性。
封装的实现步骤:
a.修改属性可见性(设为private)
b.创建getter/setter方法(用于属性的读写)
c.在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
包:
管理Java文件,解决同名文件冲突
定义包:
package 包名;
必须放在Java源程序第一行,包名间可以使用“."隔开
eg: com.io.mylan
系统中的包:
java.(功能).(类)
java.lang.(类)包含java语言基础的类
java.util.(类)包含java语言中的各种工具类
java.io.(类)包含输入、输出相关功能的类
访问控制符
类:public、默认
属性和方法:public 、 protected、 默认 、 private
this关键字代表当前对象
this.属性------操作当前对象属性
this.方法------调用当前对象的方法
内部类(Inner Class)
定义在一个类里面的类,包含内部类的类称为外部类
主要作用:
a提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
b.内部类的方法可以直接访问外部类的所有数据,包括私有的数据
c.内部类所实现的功能使用外部类同样可以实现,只是使用外部类有时更方便
成员内部类也称为普通内部类
使用方法:
1.必须使用外部类对象来创建内部类对象,不能直接去new一个内部类对象。(内部类 对象名=外部类对象. new内部类(); )
2.成员内部类的.class文件:外部类名$内部类名.class
注意:
外部类是不能直接使用内部类的成员和方法,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。
静态内部类是static修饰的内部类
方法内部类:
方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。
继承
概念:继承是类与类的一种关系,是一种“is a”的关系
好处:子类直接拥有父类的所有属性和方法(private修饰的无效)
实现代码复用
语法规则:class 子类 extends 父类
继承的初始化顺序:
先初始化父类再初始化子类
先初始化成员变量再初始化构造方法
final关键字
可以修饰类、方法、属性
final修饰类时,该类不允许被继承
final修饰方法时,该方法不允许被覆盖(重写)
final修饰属性时,该属性不能进行隐式初始化(类的初始化属性必需有值)或在构造方法中赋值
super关键字:
在对象的内部使用,可以代表父类对象
1.访问父类的属性:
super.属性
2,访问父类的方法:
super.方法
子类的构造过程中必须调用其父类的构造方法
多态------对象的多种形态
1.引用多态
父类的引用可以指向本类的对象Person p =new Person();
父类的引用可以指向子类的对象Person p1=new People();
2.方法多态
创建本类对象时,调用方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法
引用类型转换:
1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换
2向下类型转换(强制类型转换),是大类型到小类型.
**instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题
抽象类
定义:抽象类前使用abstract修饰
作用:限制规定子类必须实现某些方法,但不关注实现细节
抽象方法没有方法体以分号结束。
使用规则:
a.abstract定义抽象类
b.abstract定义抽象方法,只有声明,不需实现
c.包含抽象方法的类是抽象类
d.抽象类中可以包含普通的方法,也可以没有抽象方法
接口:
概念:一种特殊的类,由全局常量和公共的抽象方法所组成。
使用interface关键字定义,是一种规范,限制类里必须提供某些方法。
语法:
【修饰符】 interface 接口名 【extends 父接口1,父接口2.……】
{
零到多个常量定义……
零到多个抽象方法的定义……
}
接口就是被用来继承、实现的,修饰符一般建议用public
(不能使用private和protected修饰接口)
使用接口:
一个类可以实现一个或多个接口,实现接口使用implements关键字,Java中的一个类只能继承一个父类是不够灵活的,通过实现多个接口可以做补充。
继承父类实现接口的语法为:
【修饰符】class 类名 extends 父类 implements 接口1,接口2……
{
}
如果要继承父类,继承父类必须在实现接口之前。