1.类与对象的概念:类就像是一个模板,而对象是类的一个实例化对象。拿生活中的例子来说,类就是一张设计图纸,而对象就是根据这张图纸建造出来的实物。
2.面向对象的三大特征:封装、继承、多态。
封装:把同一类事物所具有的共同属性和共同行为功能抽取到Java类中的过程称为封装并将类里面的数据和行为进行保护。常用方法为:设置数据的访问修饰符为private,这样外部的事物就不能随意更改类中的数据。
继承:子类继承父类的所有非private成员。
多态:关于多态需要记住三句话:
(1)父类类型的变量可以指向子类类型的对象。
(2)能够调用什么方法取决于变量的类型。
(3)具体调用什么方法取决于对象的类型。
什么意思呢?举个例子:假设父类类型是地球人,子类类型是中国人。
代码:
class DiQiuRen{
pulbic void speak(){
System.out.println("我是地球人");
}
}
class Chinese extends DiQiuRen{
@override
public void speak(){
System.out.println("我是中国人"); //子类重写父类的speak()方法
}
public void baiNian(){
System.out.println("过年好!");
}
}
public class Main{
public static void main(String[] args)
{
DiQiuRen dqr=new Chinese(); //根据多态中的第一句话,父类类型变量可以指向子类对象,即父类类型变量dqr指向子类对象
dqr.baiNian();//这句代码是有问题的,因为根据多态中第二句话,能够调用什么方法取决于变量的类型,而变量类型是地球人,可以调用的方法只有speak()方法,没有baiNian()方法。
dqr.speak();//这句代码的执行结果是“我是中国人”。解析:根据多态中第三句话,具体调用什么方法取决于对象的类型。在这里,对象的类型是中国人,所以具体执行的speak()方法是中国人类里的speak()方法。
3.对象间的关联关系
可以以对象作为一个类的成员变量。
例如:
有Dog类:
public class Dog{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
}
有Person类:
class Person(){
private Dog pet;
public Dog getPet()
{
return pet;
}
public void setPet(Dog pet)
{
this.pet=pet;
}
public void sayHello()
{
if(this.net==null)
{
System.out.println("我没有宠物");
}
else
{
System.out.println("我的宠物是:"+pet.getName());
}
}
}
Main类:
public class Main{
public static void main(String[] args)
{
Person p=new Person;
Dog d=new Dog();
d.setName("旺财");
p.setPet(d);//设置对象间的关联关系
p.sayHello();
}
}
4.包的作用
(1)避免类重名
(2)便于管理不同用途的类
注意,包的命名:包名小写,公司域名反.产品名.模块名
例如:百度的域名是:www.baidu.com
包名则是:com.baidu.www
5.关于final的用法:
(1)final修饰局部变量表示这个变量只能被赋值一次;
(2)final类型的方法不能被重写;
(3)final类型的类不可以被继承。String 类就是final类。
6.静态static:
有时候想定义一些不和具体对象关联、不需要new就可以调用的方法(不访问成员变量的方法就可以定义成static 方法);
一些场景下会要求一个类的多个实例共享一个成员变量。这时候就要用到static。
(1)static方法可以直接通过类名.方法名调用,而非static方法则需要new。
(2)static成员不可以访问非static成员,而非static成员可以访问static成员;
static与final连用时表示常量:值不可改变且全局共享。
7.抽象类与接口
抽象类的特点:
(1)抽象方法没有方法体,连空方法体都不能有;一旦类中有抽象方法,这个类一定要被修饰为抽象类;
(2)抽象类是不可以被实例化的类;
(3)抽象类可以没有抽象方法;
(4)抽象类的子类必须实现父类的所有抽象方法,除非抽象类的子类也是抽象类。
接口的特点:
(1)接口中不能声明普通成员变量,只能声明static成员变量;
(2)接口可以继承其他接口。
相同点:都有抽象方法
不同点:(1)抽象类中可以定义方法的实现(这个方法不是抽象方法),接口中一定不能定义方法的实现;
(2)一个类只能继承一个父类,而一个类可以实现多个接口;(继承的限制)
(3)接口中不可以定义成员变量,而抽象类中可以定义成员变量。
8.匿名内部类
有时候创建一个类的子类只是为了创建一次它的对象,声明一个子类很麻烦,可以直接new 类名(){//类体};
这样就是相当于声明一个了这个类的子类,并创建了这个子类的对象。
注意:匿名内部类的this问题:类中的this指的是匿名内部类的对象,如果想要指外部的对象,要用“类名.this”.
9.equals和==
==运算时用于比较两个是否是同一个对象。如果要比较对象的内容是否相等,要调用equals()方法,返回true表示相等,false表示不相等。
10.类的静态代码块
静态代码块在类第一次被使用时执行一次,且在构造函数之前执行,一般用于对类进行初始化。
11.枚举类型
枚举类型的地位和类和接口是一样的!
为什么要有枚举?答:限定一个数据的可选值方向。例如:方向
(1)枚举声明:public enum Dir{
Left,Right,Up,Down
}
(2)枚举类型的赋值:Dir d=Dir.Left;
(3)枚举类型的变量相等使用==就可以