1、继承:父类(SuperClass)和子类(SonClass),父类的非私有化属性和方法可以默认继承到子类。Class Son extends Father{ },而如果父类中的私有方法被子类调用的话,则编译报错。父类的构造方法子类不可以继承,更不存在覆盖的问题。(非构造方法可以)如果子类访问父类的构造方法,则在编译的时候提示访问不到该方法。JAVA中不允许多继承,一个类有且只有一个父类(单继承)。JAVA的数据结构为树型结构,而非网状。(JAVA通过接口和内部类实现多继承)
2、方法的覆盖(overriding):方法的重载并不一定是在一个类中:子类可以从父类继承一个方法,也可以定义一个同名异参的方法,也称为overloading。当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方法覆盖父类的方法,称为覆盖。(注意返回值类型也必须相同,否则编译出错。)如果方法不同,则成重载。对于方法的修饰词,子类方法要比父类的方法范围更加的宽泛。父类为public,那么子类为private则出现错误。之所以构造方法先运行父类再运行子类是因为构造方法是无法覆盖的。
3、以下范围依次由严到宽:
private :本类访问;default :表示默认,不仅本类访问,而且是同包可见。Protected:同包可见+不同包的子类可见Public :表示所有的地方均可见。
4、当构造一个对象的时候,系统先构造父类对象,再构造子类对象。构造一个对象的顺序:(注意:构造父类对象的时候也是这几步)① 递归地构造父类对象;② 顺序地调用本类成员属性赋初值语句;③ 本类的构造方法。
Super()表示调用父类的构造方法。Super()也和this一样必须放在第一行。This()用于调用本类的构造方法。如果没有定义构造方法,那么就会调用父类的无参构造方法,即super()。要养成良好的编程习惯:就是要加上默认的父类无参的构造方法。
5、多态:多态指的是编译时类型变化,而运行时类型不变。多态分两种:① 编译时多态:编译时动态重载;② 运行时多态:指一个对象可以具有多个类型。对象是客观的,人对对象的认识是主
的。例:Animal a=new Dog();查看格式名称;Dog d=(Dog)a。声明父类来引用子类。
运行时多态的三原则:(应用时为覆盖)1、对象不变;(改变的是主观认识);2、对于对象的调用只能限于编译时类型的方法,如调用运行时类型方法报错。在上面的例子中:Animal a=new Dog();对象a的编译时类型为Animal,运行时类型为dog。注意:编译时类型一定要为运行时类型的父类(或者同类型)。对于语句:Dog d=(Dog)a。将d强制声明为a类型,此时d为java接口有没有构造方法Dog(),此时d就可以调用运行时类型。注意:a和d指向同一对象。3、在程序的运行时,动态类型判定。运行时调用运行时类型,即它调用覆盖后的方法。
6、关系运算符:instanceof a instanceof Animal;(这个式子的结果是一个布尔表达式)a为对象变量,Animal是类名。上面语句是判定a是否可以贴Animal标签。如果可以贴则返回true,否则返回false。在上面的题目中: a instanceof Animal返回True,a instanceof Dog也返回True,instanceof用于判定是否将前面的对象变量赋值后边的类名。Instanceof一般用于在强制类型转换之前判定变量是否可以强制转换。如果Animal a=new Animal();Dog d=Dog()a;此时编译无误,但运行则会报错。Animal a=new Dog()相当于下面语句的功能:Animal a=getAnimal();
Public Animal;Return new Dog();
7、封装、继承、多态为面向对象的三大基石(特性)。运行时的动态类型判定针对的是方法。运行程序访问的属性仍为编译时属性。Overloading针对的是编译时类型,不存在运行时的多态。final可以修饰类、属性、方法。当用final修饰类的时候,此类不可被继承,即final类没有子类。这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生。当利用final修饰一个属性(变量)的时候,此时的属性成为常量。JAVA利用final定义常量(注意在JAVA命名规范中常量需要全部字母都大写): Final int AGE=10; 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。在JAVA中利用public static final的组合方式对常量进行标识(固定格式)。对于在构造方法中利用final进行赋值的时候,此时在构造之前系统设置的默
认值相对于构造方法失效。
8、常量(这里的常量指的是实例常量:即成员变量)赋值:①在初始化的时候通过显式声明赋值。Final int x=3;②在构造的时候赋值。局部变量可以随时赋值。利用final定义方法:这样的方法为一个不可覆盖的方法。Public final void print(){};为了保证方法的一致性
(即不被改变),可将方法用final定义。如果在父类中有final定义的方法,那么在子类中继承同一个方法。
如果一个方法前有修饰词private或static,则系统会自动在前面加上final。即private和static方法默认均为final方法。注:final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。也就是说,是否继承取决于这个方法对于子类是否可见。
9、Abstract(抽象)可以修饰类、方法如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。Final和abstract永远不会同时出现。当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。
注意比较:
private void print(){};此语句表示方法的空实现。
Abstract void print(); 此语句表示方法的抽象,无实现。
如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。反之,如果一个类为抽象类,那么其中可能有非抽象的方法。如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须为抽象类,这与此类为非抽象冲突,所以报错。所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract类。如果没有定义抽象的父类,那么编
译会出现错误。Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)
10、JAVA的核心概念:接口(interface)。接口与类属于同一层次,实际上,接口是一种特殊的抽象类。如:interface IA{},public interface:公开接口,与类相似,一个文件只能有一个public接口,且与文件名相同。在一个文件中不可同时定义一个public接口和一个public类。一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。
一个类实现一个接口的格式:
class IAImple implements IA{};一个类实现接口,相当于它继承一个抽象类。类必须实现接口中的方法,否则其为一抽象类。实现中接口和类相同。接口中可不写public,但在子类中实现接口的过程中public不可省。(如果剩去public则在编译的时候提示出错:对象无法从接口中实现方法。)注:① 一个类除继承另外一个类,还可以实现接口;class IAImpl extends java.util.Arrylist implement IA{}。② 一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开。Implements IA,IB所谓实现一个接口,就是指实现接口中的方法。③ 接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。例:interface IC extends IA,IB{};
接口也可以用于定义对象IA I=new IAImpl();实现的类从父类和接口继承的都可做运行时类型。
11、接口和多态都为JAVA技术的核心。接口往往被我们定义成一类XX的东西。接口实际上是定义一个规范、标准:① 通过接口可以实现不同层次、不同体系对象的共同属性;通过接口实现write once as anywhere.以JAVA数据库连接为例子:JDBC制定标准;数据厂
商实现标准;用户使用标准。接口通常用来屏蔽底层的差异。②接口也因为上述原因被用来保持架构的稳定性。JAVA中有一个特殊的类: Object。它是JAVA体系中所有类的父类(直接父类或者间接父类)。此类中的方法可以使所的类均继承。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论