面向对象概述
对象
类实质上就是封装对象属性和行为的载体,而对象则是类抽抽象出来的一个实例
类
类实质上就是封装对象属性和行为的载体
类中对象的行为是以方法的形式定义的
对象的属性是以成员变量的形式定义的
封装性
将对象的属性和行为封装起来,其载体就是类
类通常对客户隐藏实现细节
继承性
继承性主要利用特定对象之间的共有属性
子类的实例都是父类的实例,但父类的实例不一定是子类的实例
多态性
将父类对象应用于子类的特征就是多态
提到多态,就不得不提到抽象类和接口,因为多态的实现并不依赖
于具体类,而是依赖于抽象类和接口
类
类的成员变量和类的成员方法统称为‘类成员’
成员变量
public class Test{
private int a;//成员变量定义
}
成员方法
public class Test{
public void Meth(){
};//成员方法定义
}
权限修饰符
可以修饰类,类成员
private
如果类成员被修饰为private则类成员只可在本类使用,对子类以及其他包的类均不可见
如果类被修饰为private则类隐藏其数据,用户不可访问
注:如果想让类被子类或者其他包的类只用,则需设置为public;如果父类不允许通过继承产生的子类访问父类的成员变量,那么该成员变量应该被修饰为private
public
如果类成员被修饰为public则可以在本类,子类以及其他包的类可见
注:如果子类与父类不在同一个包那么,父类必须修饰为public才能被子类访问
protected
如果一个类被修饰为protected则只有本包内的属于该类的子类以及本包内的其他类可以使用,其他包的类不可使用
注:如果不设置访问权限,则默认为包存取范围,即只有这个包中的类可以调用
package com.mypack
class Test{//无权限修饰符
public void meth(){//有public修饰,但受类权限约束作用范围同类,即public无效
}
}
局部变量
局部变量在方法被‘执行时’创建,‘结束时’被销毁
局部变量在定义时必须被赋值,否则出错
在不同作用区域内可以使用变量名相同的变量
this关键字
public class Test{//定义类
public int a;//定义成员变量
public void Meth(int a){//定义成员方法
this.a=a;//将参数a的值赋值给成员变量
}
}
注:this关键字用来表示‘类对象的引用’,即当在类的成员方法或者局部变量覆盖成员变量时,明确this关键字引用的是类成员
类的构造方法
类中除了成员变量以及成员方法外还有构造方法
构造方法与类同名,对象的创建就是通过构造方法完成的
‘每实例化一个对象就时,类就会自动调用构造方法’
public class Test{//定义类
public Test(){//定义构造方法,无返回值,不需要使用void
}//如果用户没有定义构造方法,则系统自动创建不带参数的构造方法
}
静态变量、常量和方法
static关键字
static可以声明变量、常量以及方法
被修饰为静态的成员‘属于类所有’
public class Test{
final static double=PI=3.14;//定义静态常量
static int a;//定义静态变量
public static void Meth(){//定义静态方法
}
public void main(String[] args){
System.out.println(class.PI);//调用静态常量,类.静态成员名
System.out.println(class.a);
System.out.println(class.Meth);
}
}
注:在方法体中不可定义静态变量;静态方法中不可使用this关键字;静态方法不可直接调用非静态方法;被定义为静态域中的内容会被首先执行,且只会执行一次
public class Test{//定义类
static{//定义静态域
...
}
}
类的主方法
public static void main(String[] args){
...
}
注:由于主方法为静态方法,故主方法调用的方法也必须为静态
对象
对象创建
对象为类的一个实例,可以通过new操作符类创建对象,实例化一个对象会自动调用构造方法
即可以时用new操作符调用构造方法来创建对象
Test a=new Test();
访问对象的属性和行为
public classTest{//定义类
int a=1;//定义类的成员变量
public void Meth(){//定义类的成员方法
System.out.println("meth");
}
public static void main(String[] args){
Test b=new Test();//创建对象,此时b‘代表了’类Test因而具有类里边的类成员
b.a=2;//对象调用类成员
b.Method();//对象调用类成员
}
}
对象的比较
String a=new String("1");
String b=new String("2");
String c=a;
System.out.println(b==c);//返回值为false
System.out.println(b.equals(c));//返回值为true
注:‘==’比较的是两个对象的地址,‘.equals’比较的是两个对象的内容