首页 > 代码库 > 类、多态、抽象、接口小结
类、多态、抽象、接口小结
什么是类
类是具有相同的属性和方法的一堆对象的集合。
什么是对象
万物皆对象,日常生活中能看到和摸到的东西都是对象。
对象由属性和行为组成
属性是对象所具有的特征,行为是对象可以做的动作
类和对象的关系
类是对象的描述,对象是类的实例
对象的每个属性被表示为类中的一个成员变量
对象的每个行为成为类中的一个方法
什么是构造函数
构造函数是类中的一个特殊方法,该方法在对象实例化时被调用。构造函数的用途是当对象实例化时,初始化对象中的成员变量。
final关键字
1.final 可修饰变量(创建符号常量),该变量在被赋值后不能被改变
2.final 作为可选修饰符修饰一个类(最终类),该类不能被其他类继承(即不能有子类)
3.final 可以修饰一个方法(最终方法),该方法不能被重写(但是可以重载)
static关键字
关键字static可用于修饰方法和属性,不能用于修饰类(特例:内部类除外)
1.static修饰成员变量或方法时,该变量或方法不与所在类的特定实例关联。即通过static声明的成员变量或方法可以被认为是全局的,任何 其他类都 可以直接访问静态成员变量或调用静态方法,不需要该类的一个实例。
2.static修饰某个成员变量时,该变量是单独存放在内存开辟的静态储存区
3.static修饰变量,访问时不需要new(实例化),直接采用”类名.变量名“
4.static修饰变量和方法跟当前类没有直接关联
5.static修饰变量的值不随这类的初始化而初始化,类被加载的时候只初始化一次
6.static修饰的静态方法,在访问外部属性的时候,该外部属性也必须是静态;调用外部方法时,被调用的方法也必须是静态方法
什么是继承?什么时候使用继承?
在面向对象编程中,可以通过扩展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种子类(subClass)继承父类(基类、superClass)并拥有父类的一切方法和属性(不包含父类用pravate修饰的方法和属性)的方式就称为继承。
当两个或多个类是不相同的,但是共享相同特征的时候,将共同的元素从类中拿出来,放到一个父类中。这些类继承父类,因此就继承了所有父类的特征,同时,每个子类又保留了不同的特征。使用继承不仅可以重用已有代码避免代码重复,还可以创建一个更容易维护和修改代码的程序
判断父类和子类的继承关系是否正确,用“is a”
super和this关键字的用法
super关键字:用来调用父类中子类已经重写的方法或者调用父类的构造函数;
this关键字:对象对自身的引用。当在一个类中,引用类本身的成员变量或者方法时,可以显示地使用this引用
父类构造器对子类构造器的影响
关键字super可用于调用父类的构造函数,如果没有显式地使用super关键字,编译器会自动添加一个无参的super();来调用父类的构造函数。但是如果父类中没有无参构造函数,在这种情况下调用super();不会通过编译,此时子类构造函数需要显式地调用父类构造函数,并将恰当的实参传递给父类的构造函数
什么是向上转型
从低精度数据类型向高精度数据类型转换时实行自动转换,这种类型转换技术成为向上转型
向上转型对于引用数据类型同样适用。在父类和子类的继承关系中,沿着子类向父类的向上转型是自动转型。
举例:double d = int 10; Animal a = new Dog();
什么是多态
多态是指一个对象有多种形式的能力。一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征(允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式)
静态多态(编译时多态):程序在编译时系统就能决定调用哪个方法 —— 重载
动态多态(运行时多态):程序运行中系统才能动态确定方法所指对象 —— 重写
什么是多态参数
当方法的某个形式参数是一个引用的时候就称为多态参数。与该引用兼容的任何对象都可以传递给方法,从而允许方法接受不同数据类型的形参
intanceof关键字的的使用
判断某个引用对象是否指向某个类
什么是动态绑定
首先“绑定”的概念:将一个方法调用与该方法所在的类关联起来就称为“绑定”
绑定分为静态绑定(前期绑定、编译期绑定)和动态绑定(后期绑定)
静态绑定是指在程序执行前方法已经被绑定,此时由编译器或其他连接程序实现。java中的方法只有final、static、private和构造器是静态绑定
动态绑定是指在运行时根据具体对象的类型进行绑定。java中所有的普通方法,都采用动态绑定技术。通过动态绑定,JVM必须沿着继承层次树向下找,判断一个方法是否被重写。如果方法被重写了,在运行时就执行子类中的方法,而不是编译时调用父类方法
什么是向下转型?怎么用(代码举例)
与向上转型相反,从高精度向低精度数据类型转换称为向下转型
向下转型需要使用强制类型转换符
举例:int a = (int) 11.45; Animal a = new Dog(); Dog d = (Dog) a;
什么是抽象类,什么是抽象方法?关键字是什么
抽象类是从多个具体的类中提取出共性行为放到父类中,这些具体类中不同行为在该抽象类中以抽象方法的形式来定义,在具体的子类中实现。
抽象类是指不能被实例化的类。在抽象类中,类的所有其他功能都存在,成员变量、方法、构造函数都可以用同样的方式访问,只是不能创建抽象类的实例
抽象方法只有方法签名,没有方法体(只声明,不实现)。将一个方法声明为抽象方法有两个结果:1.类也必须声明为抽象类;2.任何子类必须重写抽象方法,除非该子类本身也是抽象的
关键字:abstract
什么是接口
接口是特殊的抽象类,它比抽象类更加抽象。
以下来自百度百科:【Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。包含两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”】
接口和抽象类的区别
1.接口中只能包含抽象方法,而抽象类中可以包含普通方法
2.接口中不能定义静态方法,而抽象类可以定义静态方法
3.接口中只能定义静态常量属性,不能定义普通属性,而抽象类既可以定义普通属性,也可以定义静态常量属性
4.接口不包含构造器,而抽象类中可以包含构造器。抽象类中的构造器并不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化工作
5.接口中不包含初始化块,而抽象类中可以包含初始化块
6.一个类最多有一个直接父类,包括抽象类,但是一个类可以实现多个接口,通过实现多个接口来弥补java单继承的不足
接口与多态
接口,同重写、重载一样,是多态的一种表现形式(或者说是实现多态技术的重要手段)
以下摘自网络:多态是面向对象编程的特征之一,而接口是一系列方法的声明,是一些方法特征的集合,有特定的语法和结构,这两者根本不是同一类型和层次上的概念。接口毫无疑问可以体现出多态性来,但是多态性未必一定要用接口,只要存在方法的重写、重载与动态连接即可体现多态性(如存在继承关系的类之间),所以,不存在“什么时候用接口什么时候用多态”的问题,程序里写的具体代码只可能是接口,只是这代码可能会体现出多态性而已,两者可以在不同的概念层次上并存,不存在冲突。
简而言之,你可以在程序里用代码定义一个接口,但是你不能定义一个多态,多态只是对你代码特征的一种描述,一种概念上的抽象和总结。
类、多态、抽象、接口小结