首页 > 其他 > 详细

面向对象高级

时间:2021-03-29 17:43:33      阅读:35      评论:0      收藏:0      [点我收藏+]
一、抽象类 概念: 抽象类必须使用abstract class声明 一个抽象类中可以没有抽象方法。抽象方法必须写在抽象类或者接口中。 格式: abstract class 类名{ //抽象类 } 抽象方法: 只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关 键字声明。     格式: abstract class 类名{ // 抽象类 public abstract void 方法名() ; // 抽象方法,只声明而未实现 } 在抽象类的使用中有几个原则: · 抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。 · 一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全部抽象方法。 常见问题: 1、 抽象类能否使用final声明? 不能,因为final属修饰的类是不能有子类的 , 而抽象类必须有子类才有意义,所以不能。 2、 抽象类能否有构造方法? 能有构造方法,而且子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的 构造方法(默认是无参的),之后再调用子类自己的构造方法。 二、接口 概念:如果一个类中的全部方法都是抽象方法,全部属性都是全局常量,那么此时就可以将这个类定义成一个接口。 定义格式: interface 接口名称{       全局常量 ; 抽象方法 ;   } 因为接口本身都是由全局常量和抽象方法组成 , 所以接口中的成员定义可以简写: 1、全局常量编写时, 可以省略public static final 关键字,例如: public static final String INFO = "内容" ; 简写后: String INFO = "内容" ; 2、抽象方法编写时, 可以省略 public abstract 关键字, 例如: public abstract void print() ; 简写后: void print() ; 接口的实现 implements 接口可以多实现: 格式: class 子类 implements 父接口1,父接口2...{ } 以上的代码称为接口的实现。那么如果一个类即要实现接口,又要继承抽象类的话,则按照以下的格式编写 即可: class 子类 extends 父类 implements 父接口1,父接口2...{ } 接口的继承 接口因为都是抽象部分, 不存在具体的实现, 所以允许多继承, 例如: interface C extends A,B{ 接口和抽象类的区别: 1、抽象类要被子类继承,接口要被类实现。 2、接口只能声明抽象方法,抽象类中可以声明抽象方法,也可以写非抽象方法。 3、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。 4、抽象类使用继承来使用, 无法多继承。 接口使用实现来使用, 可以多实现 5、抽象类中可以包含static方法 ,但是接口中不允许(静态方法不能被子类重写,因此接口中不能声明 静态方法) 6、接口不能有构造方法,但是抽象类可以有 三、多态 概念:就是对象的多种表现形式,(多种体现形态) 多态的体现: 对象的多态性,从概念上非常好理解,在类中有子类和父类之分,子类就是父类的一种形态 ,对象多态性 就从此而来。 ps: 方法的重载 和 重写 也是多态的一种, 不过是方法的多态(相同方法名的多种形态)。 重载: 一个类中方法的多态性体现 重写: 子父类中方法的多态性体现 四、内部类 概念 :在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。 广泛意义上的内部类一般来说包括这四种: 1、成员内部类 2、局部内部类 3、匿名内部类 4、静态内部类 1.成员内部类 成员内部类 是最普通的内部类,它的定义为位于另一个类的内部,格式如下: class Outer {    private double x = 0;        public Outer(double x) {        this.x = x;   }         class Inner {     //内部类         public void say() {            System.out.println("x="+x);       }   } } 特点: 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。   不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默 认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问: 外部类.this.成员变量 外部类.this.成员方法 外部使用成员内部类 Outter outter = new Outter();         Outter.Inner inner = outter.new Inner(); 2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限 于方法内或者该作用域内。 3.匿名内部类 new 父类构造器(参数列表)|实现接口()     {       //匿名内部类的类体部分     } 在使用匿名内部类的过程中,我们需要注意如下几点:     1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能 继承一个类或者实现一个接口。     2、匿名内部类中是不能定义构造函数的。     3、匿名内部类中不能存在任何的静态成员变量和静态方法。     4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。     5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。         6、只能访问final型的局部变量 静态内部类 静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。 静态内部类是不需要依赖于外部类对象的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非 static成员变量或者方法. 格式: public class Test {    public static void main(String[] args) {        Outter.Inner inner = new Outter.Inner();   } } class Outter {    public Outter() {           }        static class Inner {        public Inner() {                   }   } }

面向对象高级

原文:https://www.cnblogs.com/apmin1/p/14592833.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!