一、
1.OOA:面向对象分析
OOD:面向对象设计
OOF:面向对象编程
类:具体实例共同特征和行为抽象出来,封装成一个整体,模具类
对象:具体的实例,通过模具类创建出的一个具体的事物
2.属性(数据成员)➡特征、状态
操作( 方法成员)➡方法
访问权限 class 类名 extends 基类 implements 接口列表{
//1,成员变量,成员属性,成员字段,成员域(fields)
//2.构造方法,构造器(constructor)
//3.成员方法(methods)
//1).实例方法(非静态);2) 静态方法=类方法;3setter和getter(设置器和访问器))
}
}
二、访问权限
public >protected >默认的(package或default) >private
1,说明:
public,修饰某成员,任意位置都可以访问
protected,修饰某成员,相同类包的不同类可以访问,不同类包中有父子继承关系的类可以访问
默认的(package),什么都不写,就是默认的访问权限,它修饰的成员,在一个类包中的不同类可以访问。
private,修饰的成员只能自己类包中可以访问
三、继承和接口
继承的特点:
1,只能继承父类中非private的成员
2,父类中的成员可被子类覆盖
(1)成员变量的覆盖------变量的隐藏
(2)成员方法的覆盖-----方法重写
(3)方法重载和方法重写的区别
3,子类通过super关键字访问父类中被覆盖/隐藏的成员
4,构造方法的执行顺序:
(1)子类生成对象时,先执行父类的构造方法,再执行子类的构造方法
(2)子类默认调用父类中无参数的构造方法,子类构造方法中如果有super()代码,一定是第一行语句。
(3)子类构造方法中,可以通过super(×××)指定调用父类中的某个构造方法
super 和 this 的区别:super可以表示父类对象,也可以表示父类的构造方法。this同理。
this关键字:
(1)用来区分全局变量和局部变量
(2)用来指代自身对象的引用
int age;
public void setAge(int age){
this.age=age;
}
分析:(1)this调用的是全局变量 (2)this调用的是某对象的成员变量
class point{ // 定义“点”类
//x轴坐标和y轴坐标,由于准备用于继承,故修饰为protected
protected float mx,my;
public point(float x,float y){ //构造方法
mx=x;
my=y;
}
}
class circle extends point{ //定义“圆”类继承于“点”类
protected float mRadius; //半径
public circle (float x,float y,float r){ //构造方法
super (x,y); //显式调用父类有参构造方法
mRadius = r;
}
}
子类调用父类构造方法
构造方法(默认一定会调用父类中无参数的构造方法)
(1)如果父类中有带参数的构造方法,则子类会报错
(2)如果父类中只有带参数的构造方法,那么子类必须要指定调用父类中某个构造方法,否则会报错
不能直接默认调用父类中带参数的构造方法
(3)子类生成对象时,默认先执行父类的构造方法,再执行子类的构造方法
子类和父类对象的转换:
父类 对象1 = new 子类构造方法(参数);
此时的对象1,就是对象的上转型
子类 对象2 = (子类)父类对象1
此时的对象2,就是对象的下转型
此时父类对象1必须是上转型对象才成立
接口的特点:
1,接口用关键字interface来定义,而不是class
2, 接口定义的变量全部是公有的,静态的,最终的,所以都是常量
3,接口中定义的方法都是抽象、公有的,所以修饰符可以省略
4,接口没有构造方法,而且定义的方法都是抽象方法,即只提供方法的定义,而不提供具体的实现
5,接口采用多重继承机制,而不是采用类的单重继承机制
代码:
[修饰符] <interface> <接口名> [extends 父接口列表]{
[public] [static] [final] 类型 变量名:初始值; //静态常量
[public] [abstract] 返回值 方法名([参数列表]); //抽象方法
接口的应用:
一个类要实现某个或某几个接口时使用 implements关键字,一个类可以同时实现多个接口,各接口间用","隔开。这个类,称为接口的实现类
四、成员变量
定义:字段、属性、成员域。
默认情况下会被赋初始值
int类型,初始值为0
float类型,初始值为0.0f
double类型,初始值为0.0
char类型,初始值为‘\u000’
boolean类型,初始值为false
String类型,初始值为null
可以通过setter和getter对成员变量进行修改和访问
五、构造方法
特点:
1,构造方法的名字和类的名字相同
2,无返回类型,且不写void
3,构造方法的作用,是给对象的成员变量赋初始值
4,每一个类可以有0个或多个构造方法
如果没有,JVM会提供一个无参数无方法体的构造方法
如果有,JVM就不会提供构造方法了
5,构造方法在创建对象时通过new关键字调用
6,构造方法可以重载
方法重载
定义:一个类中有多个相同方法名的方法,就是方法重载
特点:方法重载,依靠参数的不同来区分,参数的类型不同,或个数不同
说明:方法重载与方法的返回类型无关!
public void func(){}
public void func(int a){} //方法重载,可以参数个数不同
public void func(int a,int b){} //方法重载,可以参数个数不同
public void func(double a,double b){} //方法重载,可以参数类型不同
public void func(int x,int y){} //不合法,方法重载,与参数名字无关
public int void func(){} //不合法,方法重载,与返回类型无关
六、方法 访问权限 返回类型 方法名(参数列表){
方法体
[是否有return 语句]//主要看是否有void{}
七、
抽象类
定义:由abstract修饰的类,就是抽象类
特点:抽象类中可以有成员变量、构造方法、实例方法,与普通类一致
抽象类中还可以有抽象方法
应用:抽象类的派生类,必须重写所有的抽象方法
什么是抽象方法?
定义:由abstract修饰的方法,就是抽象方法
特点:抽象方法只能有声明,不能有实现
应用:含有抽象方法的类,必须是抽象类;抽象类的子类,必须重写抽象方法
代码:
public abstract class Abstractclass{
private int x=100;
public void show()
}
System.out.println("抽象类中可以有成员变量:"+this.x);
} public abstract void say(): //抽象方法,只能有声明不能有实现
抽象类一般没有足够的信息来描述一个具体的对象,抽象类只用于继承,不能用于创建对象。一个抽象类一般包括一个或多个抽象方法(只有方法说明,没有方法体),也可以没有。抽象类的子类必须实现其父类定义的每一个抽象方法,若没有实现父类的所有抽象方法,则该子类也应该定义为抽象类。换句话说,有抽象方法的类一定是抽象类!