面向对象基础:
1.定义:对象包括属性和方法,属性是指对象的状态,方法是指处理对象的行为。java语言中,类是对象的模板,所有的对象都是由类创建的,属性即类的成员变量,方法也就是类的成员方法。
2.特点
封装性:将对象的属性和方法封装起来,使用户知道并使用对象的属性和方法即可,而不需要知道对象的具体实现。比如手机。。优势:实现错误局部化,提高程序维护性
继承性:面向对象设计中,允许通过继承原有类的部分特性或者全部特性而产生新的类。子类不仅可以继承,还可以添加一些方法创建特有的个性
多态性:指父类的属性和方法被子类继承后,可以有不同的数据类型或者表现出不同的行为
3.类的声明
修饰符 class 类名 extends 父类名 implements 接口列表 { }
修饰符:public ,abstract , final;定义为abstract时,类中没有实现的方法,不能被实例化;定义为final时,不能有子类,不能被覆盖
class 类名 是必选的,其他可选可不选
例子:public class Apple{}
4.成员方法的声明
修饰符 方法返回值类型 方法名(参数列表) { 方法体 }
修饰符:public,protected,private 可选
方法返回值和方法名是必选的。没有返回就用void
参数列表:用于指定方法中所需的参数,多个时用逗号隔开
public int add(int src,int des){
int sum=src+des;
return sum; }
5.声明成员变量
修饰符 static final 变量类型 变量名;
修饰符:public,protected,private 可选参数;
static:可选,用于指定成员变量为静态变量,可以通过类名直接访问,如果没有就表示该成员变量为实例变量
final:表示该成员变量的取值是不会改变的常量
6.静态变量和实例变量的区别
在运行java虚拟机时只为静态变量分配一次内存,在加载类的过程中完成对静态变量内存的分配,可以通过类名直接访问。实例则不痛,每创建一个实例就会为该实例的变量分配一次内存
7.定义局部变量
final 变量类型 变量名;
不能用public等,static也不能用。
变量的生命周期:从声明一个变量并分配内存空间,使用变量,然后释放该变量并清除内存空间的一个过程。
成员变量在类中声明,在整个类中都有用
局部变量在方法内或者方法内的代码块内声明,只在方法内或者方法块内有效。
8.构造方法
方法名和类名必须一致,可以没有返回类型,也不用有void,用于初始化成员变量,创建对象时立即被调用。如果没有定义构造方法,java会自动提供一个默认的构造方法,用来实现成员变量的初始化
9.对象的创建和声明
创建:类名 对象名 例如:Apple redApple,创建时并不指向任何内存,只是创建了一个引用,初始值为null
声明:为对象分配内存空间,即实例化对象。 对象名= new 类名(参数列表) 例子: redApple = new Apple()
10.使用对象
对象.成员变量 round.r=20,调用成员变量,并赋值
对象.成员方法(),float area=round.getArea(),调用方法
11.包
定义:一组相关类和接口的集合。
用途:把功能相近的类组织在一起;避免类名重复;访问权限控制
12.继承
子类的创建:修饰符 class 子类名 extends父类名
例如:abstract class Cattle extends Animal{}
如果子类的变量名和父类相同,则称子类的成员变量隐藏了父类的成员变量
如果子类的方法名和父类相同,则称子类的成员方法覆盖了父类的成员方法
13.this用法
当局部变量和成员变量的名字相同时,成员变量会被隐藏,这时在成员方法中用 this.成员变量名 来表示成员变量。this.成员方法名()
14.super用法
当父类和子类的成员变量或者成员方法相同时,在子类中想使用父类的方法或者变量时用super
super.成员变量名,super.skin="羽毛";
super.成员方法名(),super.move();
15.重载、重写、覆盖
方法的重载:一个类中出现多个方法名相同,但是参数个数或者参数类型不同的方法,执行时要根据调用的参数个数和类型来判断;
方法的覆盖:当子类的方法名和父类的方法名相同时,则称子类的方法覆盖了父类的方法,调用父类的方法用super
方法的重写:父类是抽象类,在父类中无法实现的抽象方法必须要用子类去重写。抽象方法只有方法的声明,没有方法的实现。也就是说父类中无法实现的方法,子类定义一个相同的方法去实现它。
16.抽象类和抽象方法
抽象类:只声明方法而不去实现它的类。抽象类不能被实例化,也就是不能创建对象。
abstract class 类名 { 类体 }
抽象方法:在抽象类中创建的,没有实现的,必须要子类重写的方法;
abstract 方法返回值类型 方法名 (参数列表);
例:public abstract void harvest();(不能使用private或者static定义)----没有方法体,不能实现的
17.final类
final class 类名{类体}
public final class FinaDemo{}
有时候为了程序的安全,有些类不能被继承,即不能有子类,可以声明为final类。
18.内部类
内部类不能使用public修饰,因为public修饰的类名要合文件名一致,所以一个文件中只允许一个public类
====成员内部类: ---和成员变量一样,属于类的全局成员
public class Sample{
public int id;
class Inner{
}
}
一般格式:第一步:Sample sample = new Sample();先创建外部类,才能创建自己的
第二步:Sample.Inner inner = sample.new Inner();
====局部内部类:和局部变量一样,都是在方法内定义的,只在方法内部有效
public void sell(){
class Apple{} }
====静态内部类:普通内部类不能有static数据和static属性,也不能包含嵌套类,但静态内部类可以。而静态内部类不能声明为private,一般声明为public,方便调用。
public class Sample{
static class Apple {}
} 可以直接实例:Sample.Apple apple = new Sample.Apple();和成员内部类不一样,成员内部类要先创建外部类的
====匿名类:new 类名(){};;;经常用于创建接口的唯一实现类,或者创建某个类的唯一子类
19.接口
修饰符 interface 接口名 extends 父接口列表{}
是为了实现多继承而出现的,只是定义方法而不需要去实现。接口里面的方法都要被类实现。
接口的所有方法都是抽象的,抽象类只是部分抽象;接口可以实现多重继承,类只能继承一个超类;接口是公开的,里面不能有私有的方法和变量。