知识点
-
面向过程与对象的区别:
面向过程:编程范式-c-行为
面向对象:能对现实生活的抽象 -
面向对象的三大特征:
a.封装
将客观事物封装为抽象的类,并且类可以吧自己的数据和方法只让可信的类或对象操作,最不可信的进行信息隐藏。内部操作对不可信外部而言不可见(保护性)。
b.继承
指可以使用现有类的所有功能,并且在无须重复编写原有类的情况下对原有类进行功能上的拓展(可重用)。
c.多态
一个类实例的相同方法在不同情形下有不同的表现形式。
多态机制使得具有不同内部结构的对象可以共享外部相同的接口。 -
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
类与对象的定义与使用
-
类:共性的概念
对象:具体的事物
现有类(类是生产对象的蓝图),之后才可以产生对象。对象所具有的所有属性和行为,一定是在类中进行了完整的定义。 -
类的组成
方法:构造方法,普通方法
属性:
this关键字
a. this调用本类属性
规范:在类的普通方法中访问本类属性,一定要加this关键字
b. this调用本类方法
调用普通方法:this.方法名称(参数)
调用构造方法: this(参数)
注意:this调用本类其他构造方法必须放在首行调用(编译错误)
this调用构造方法不允许成环( 编译错误)
c. this表示当前对象
class Person{
public void print(){
//this表示当前对象
System.out.println("【person类的print方法】:"+this);
}
}
public class Test {
public static void main(String[] args) {
Person per1=new Person();
per1.print();
System.out.println("【main】方法中"+per1);
System.out.println("=======");
Person per2=new Person();
per2.print();
System.out.println("【main】方法中"+per2);
}
}
static关键字
- static属性(类属性)—通过类名调用
访问static属性应该使用类名称.属性名—描述共享概念
所有的非static属性(实例属性)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制。
static属性有默认值
class ChinaPerson{
public String name;
//类属性
public static String country="中华民国";
public void getInfo(){
System.out.println("姓名为"+this.name+"国家为"+this.country);
}
}
public class Test {
public static void main(String[] args) {
Person per1=new Person();
per1.name="张三";
ChinaPerson.country="中国";
// per1.country="中国";
per1.getInfo();
Person per2=new Person();
per2.name="李四";
//per2.country="中华民国";
per2.getInfo();
}
}
- static方法(类方法)
与对象实例化无关,通过类名直接调用,常见于工具类方法
1.静态方法不能访问类中普通属性(编译错误)
2.普通方法可以访问静态属性
代码块
- 定义:使用{}定义的一种代码
根据代码块出现的位置以及关键字不同,分为四类代码块:
a.普通代码块:
定义在方法中的代码块,解决变量中方法重命名问题
作用域不同
public class Test2 {
public static void main(String[] args) {
//int data=20;//(编译错误)
{
//普通代码块
int data=10;
System.out.println(data);
}
int data=20;
System.out.println(data);
}
}
b.构造块
定义在类中的代码块(不加任何修饰符)
当有对象产生时,构造块优先于构造方法执行,产生几个对象,就调用几次构造块。
作用:在构造方法执行之前进行一些初始化操作。
class PerSon{
public PerSon(){
System.out.println("1.person类的构造方法");
}
{
//构造块
System.out.println("2.person类的构造块");
}
}
public class Test2 {
public static void main(String[] args) {
new PerSon();
new PerSon();
}
}
c.静态代码块
在类中使用static关键字定义的代码块
1.非主类的静态代码块
静态代码块在类加载时被调用,优先于构造块,不管产生多少实例化对象,只会被调用一次。
2.主类中的静态代码块
主类中的静态代码块优先于主方法执行
d.同步代码块(多线程)
继承
- 继承的限制
1.子类实例化前先调用父类构造方法产生父类对象后再调用子类构造
2.Java只允许单继承,不允许多继承
3.在进行继承的时候,子类会继承父类的所有结构(包含私有属性,构造方法,普通方法)。
显示继承(可以直接调用):父类中的所有非私有操作。
隐式继承(必须通过其他形式调用,getter,setter,不能直接调用):父类中的所有私有操作。 - 方法重写
被覆写的方法不能拥有比父类更为严格的访问控制权限。
方法覆写不能出现private关键字,隐式继承的方法无法被覆写。
判断当前方法调用的是哪个类的方法:
1.当前使用的对象是通过哪个类new的
2.调用的方法是否被子类所覆写,如果被覆写,则调用的一定是子类所覆写后的方法。
方法重载和方法重写区别
1.概念上
2.范围上
3.权限要求