java全套基础知识第八章面向对象的三大特征

it2022-07-04  147

#java全套基础知识第八章面向对象的三大特征# 面向对象的三大特征: 封装: 1.数据隐藏 2.在代码中将相同的代码抽取成方法; 继承: 1.想要拓展一个类的功能,但是不想在本类中拓展,创建新的类继承本类; 2.方法可以覆盖【重写】,成员变量不能覆盖; 多态: 1.继承关系,接口中的实现关系; 2.一个对象具有多种形态【数据类型】; 3.父类引用指向子类对象;

编译看左边,运行看左边;成员变量 编译看左边,运行看右边;成员方法

1.static关键字 0.静态变量又称之为类变量,静态方法称之为类方法; 1.静态数据【变量、方法】被类的所有的对象所共享; 2.由于该变量属于类,所以由类名直接调用; 3.本类对象也可以调用,但是不推荐使用对象调用; 4.静态数据不能访问非静态数据,因为在类被加载的时候,静态数据会随着类的加载而出现,而非静态数据是随着对象的创建而出现; 5.静态代码块:伴随着类的加载而执行,并且只执行一次; 构造代码块:伴随着构造器的执行而执行,并且优先于构造器执行;

练习:分析下面代码的运行结果; class A{ static{ sout("0"); } { sout("1"); } A(){ sout("2"); } } class B exts A{ static{ sout("3"); } { sout("4"); } B(){ sout("5"); } main(){ new B(); new B(); } }

import关键字:在某个类【A类】中如果要使用其他类【类B】的方法,但是类A和类B不在同一个包中,所以需要在类A中使用import关键字引入类B;

package关键字:包,在Java中用于区分同名的类;在物理存储上就是目录路径;

package 包路径;

带包编译:javac -d 目录 Java文件 带包运行:java 包名.类名

2.final关键字 0.意思是最终的,不可修改的; 1.能修饰变量、方法、类; 2.修饰变量时,该变量的值不能再修改,因此该变量也称之为常量; 1.修饰全局变量时,在定义该全局变量的时候就必须指定值【初始化,显式赋值】,并且后面再不能更改该变量的值; 2.修饰局部变量时,在定义时可以不用初始化,但是在第一次使用该变量之前必须初始化,并且后面再不能更改该变量的值; 3.修饰的是引用类型的变量时,该变量引用的内存地址不能更改,但是该变量所指向的对象中的数据可以更改的; 3.修饰方法时,该方法不能被重写; 4.修饰类时,该类不能被继承;【String类】

class Student{ static final String area="中国"; }

3.访问控制,权限修饰符 【public、default、protected、private】 public:在任意位置都能访问; protected: 只要不同包就不能访问; default:只要不同包就不能访问; private:只能在本类中访问;

4.抽象类和接口 抽象类: 1.在Java中被abstract修饰的类就是抽象类; 2.抽象类中可以有抽象方法【被abstract修饰的方法并且没有方法体】,也可以有普通方法; 3.包含抽象方法的类一定是抽象类; 4.抽象类中也有构造器,但是不能直接创建对象; 5.抽象类只能通过子类继承,创建子类对象来调用该抽象类中的方法;也可以使用匿名内部类的形式;

abstract class Animal{ void eat(); void addWeight(){ } } class Person extends Animal{ void eat(){ } } class Dog{ } class Cat{ } 接口: 0.从Java角度理解,接口就是interface修饰的数据; class Student{} interface Animal{} 1.对抽象类的抽象就形成了接口; 2.接口中的方法全部都是抽象方法,默认由public abstract修饰;但是在JDK9中,接口中可以有普通方法; 3.接口中的成员变量全都默认是public static final修饰; 4.类只能单一继承,接口可以多实现【implement】; 5.抽象类是is-a关系,接口是like-a关系,组合是has-a关系; 6.接口中没有构造器,所以只能通过创建新的类实现该接口,然后创建该实现类对象调用接口中的方法; interface Animal{ void eat(); } abstract class TaishengAnimal implements Animal{} abstract class LuanshengAnimal implements Animal{} class Person extends TaishengAnimal{} class Dog implements Animal{}

5.内部类 1.在类内部定义的类,相对应的外面的称之为外部类; 2.成员内部类,在外部类的成员位置定义的类称之为成员内部类; 1.外部类访问内部类中的数据需要创建内部类对象;而要访问内部类对象,则需要先创建外部类对象。 2.内部类可以无条件访问外部类中的成员;

3.静态内部类,在外部类的成员位置定义的类,但是该类被static修饰,所以不是成员内部类,而是静态内部类; 1.静态内部类只能无条件的访问外部类中的静态资源; 2.外部类要访问静态内部类中的资源则需要创建内部类对象,但是由于内部类是静态,所以由外部类类名直接调用而不需要创建外部类对象; 4.局部内部类,定义在方法中的或者其他代码块中的类称之为局部内部类; 1.外部类访问局部内部类中的数据,先创建外部类对象,调用方法,让其先定义内部类,然后在该方法中创建局部内部类对象,然后访问局部内部类中的资源; 2.局部内部类访问外部类数据,无条件访问;如果局部内部类【静态内部类、成员内部类】中有和外部类或者该局部内部类所处的方法中同名的变量,则外部类和该方法中的变量在局部内部类中会被隐藏。 3.如果局部内部类中访问到了该局部内部类所处的方法中的局部变量,则该变量必须用为final修饰。但是在JDK8中,该变量可以不显式的使用final修饰,当在局部内部类中调用该变量时,则JVM默认地认为就是final修饰的。 5.匿名内部类,没有名字的内部类,匿名内部类多用于作为实参进行参数传递;通常情况下匿名内部类是借助于抽象类或者接口来使用。

6.==和equals方法 1.两者都用于比较,返回值都是布尔类型的值; 2.==是运算符,equals是Object类【该类是Java体系中所有类的父类】中的方法; 3.==和equals在默认情况下都是比较两个对象的内存地址; 4.当重写了Object类中的equals方法,则会按照重写的规则进行比较;


最新回复(0)