慢吞云雾缓吐愁 发表于 2022-9-1 14:07:36

Java面向对象(八)

Java面向对象(八)


目录

[*]Java面向对象(八)

[*]

[*]二十四、abstract 关键字

[*]创建抽象类的匿名子类对象
[*]

[*]二十五、模板方法设计模式(TemplateMethod)
[*]二十六、接口(interface)

[*]26.1 接口简介:
[*]26.2 接口的定义和实现:
[*]26.3 接口的使用:
[*]26.4 接口的实现类的对象创建(例子)
[*]26.5 接口应用:代理模式(Proxy)
[*]26.6 特殊例子:
[*]26.7 Java8 接口新特性
[*]26.8 接口与抽象类的区别




二十四、abstract 关键字


[*]abstract 可以用来修饰的结构:类、方法。
[*]abstract 修饰类:抽象类。

[*]此类不能实例化。
[*]抽象类中一定有构造器,便于子类实例化时调用。(涉及:子类对象实例化的全过程)
[*]开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作。

[*]abstract 修饰方法:抽象方法。

[*]抽象方法只有方法的声明,没有方法体。
[*]包含抽象方法的类,一定是一个抽象类。反之,抽象类中可以没有抽象方法的。
[*]若子类重写了父类中的所有的抽象方法后,此子类方可实例化。若子类没有重写父类中的所有的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰。

[*]注意:

[*]abstract 不能用来修饰:属性、构造器等结构。
[*]abstract 不能用来修饰私有方法、静态方法、final 的方法、final 的类。

创建抽象类的匿名子类对象

public class PersonTest {       
        public static void main(String[] args) {       
       
                //非匿名的类非匿名的对象
                Worker worker = new Worker();
                method1(worker);
                //非匿名的类匿名的对象
                method1(new Worker());
                //创建了一匿名子类的非匿名对象:p
                Person p = new Person(){
                        @Override
                        public void eat() {
                                System.out.println("吃东西");
                        }
                        @Override
                        public void breath() {
                                System.out.println("好好呼吸");
                        }                       
                };               
                method1(p);
                //创建匿名子类的匿名对象
                method1(new Person(){
                        @Override
                        public void eat() {
                                System.out.println("吃好吃东西");
                        }
                        @Override
                        public void breath() {
                                System.out.println("好好呼吸新鲜空气");
                        }
                });
        }               
        public static void method1(Person p){
                p.eat();
                p.breath();
        }       
}
class Worker extends Person{
        @Override
        public void eat() {
        }
        @Override
        public void breath() {
        }       
}

二十五、模板方法设计模式(TemplateMethod)


[*]抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式。
[*]解决的问题:
当功能内部一部分实现是确定的,一部分实现是不确定的。这时可以把不确定的部分暴露出去,让子类去实现。
换句话说,在软件开发中实现一个算法时,整体步骤很固定、通用,这些步骤已经在父类中写好了。但是某些部分易变,易变部分可以抽象出来,供不同子类实现。这就是一种模板模式。
[*]例子:
public class TemplateTest {
        public static void main(String[] args) {
               
                SubTemplate t = new SubTemplate();
               
                t.spendTime();
        }
}

abstract class Template{
       
        //计算某段代码执行所需要花费的时间
        public void spendTime(){
               
                long start = System.currentTimeMillis();
               
                this.code();//不确定的部分、易变的部分
               
                long end = System.currentTimeMillis();
               
                System.out.println("花费的时间为:" + (end - start));
               
        }
       
        public abstract void code();
}

class SubTemplate extends Template{

        @Override
        public void code() {
               
                for(int i = 2;i <= 1000;i++){
                        boolean isFlag = true;
                        for(int j = 2;j <= Math.sqrt(i);j++){
                                if(i % j == 0){
                                        isFlag = false;
                                        break;
                                }
                        }
                        if(isFlag){
                                System.out.println(i);
                        }
      }
        }       
}26.8 接口与抽象类的区别

NO.区别点抽象类接口1定义包含抽象方法的类主要是抽象方法和全局常量的集合2组成构造方法、抽象方法、普通方法、 常量、变量常量、抽象方法、(jdk8.0:默认方法、静态方法)3使用子类继承抽象类(extends)子类实现接口(implements)4关系抽象类可以实现多个接口接口不能继承抽象类,但允许继承多个接口5常见设计模式模板方法简单工厂、工厂方法、代理模式6对象都通过对象的多态性产生实例化对象7局限抽象类有单继承的局限接口没有此局限8实际作为一个模板是作为一个标准或是表示一种能力9选择如果抽象类和接口都可以使用的话,优先使用接口,因为避免单继承的局

[*]在开发中,常看到一个类不是去继承一个已经实现好的类,而是要么继承抽象类, 要么实现接口。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Java面向对象(八)