zoukankan      html  css  js  c++  java
  • 五(十五)、abstract & 他的匿名子类

    abstract关键字使用
     1.abstract:抽象的;
     2.abstract可以用来修饰的结构:类 方法
     3.abstract修饰类:抽象类
                         此类不能实例化
                         抽象类中一定有构造器;便于子类对象实例化的时候调用(涉及子类对象实例化的全过程)
                         开发中,都会提供抽象类的子类,让子类对象实例化,完成相关操作;
     4.abstract修饰方法:抽象方法
                         抽象方法只有方法声明,没有方法体
                         包含抽象方法的类,一定是一个抽象类;,反之,抽象类可以没有抽象方法;
                         若子类重写了父类中的所有抽象方法(不光是直接父类,还有间接父类)后,此子类方可实例化;
                         若子类没有重写了父类中的所有抽象方法(不光是直接父类,还有间接父类)后,则此子类也是一个抽象类,
                     需要使用abstract修饰
                         
     5.使用注意点:
     a.abstract不能用来修饰:属性、构造器;
     b.abstract 不能用来修饰私有方法、静态方法,final的方法;
     

     1 public class Day15Abstract6 {
     2     public static void main(String[] args) {
     3         //不可被实例化
     4 //        Persons7 p1 = new Persons7();
     5 //        p1.eat();
     6     }
     7 }
     8 abstract class Persons7{
     9     String name;
    10     int age;
    11     int id = 1001;//身份证号
    12     
    13     public Persons7() {
    14     }
    15     public Persons7(String name, int age) {
    16         this.name = name;
    17         this.age = age;
    18     }
    19     
    20     public void eat() {
    21         System.out.println("吃饭");
    22     }
    23     
    24     //抽象方法,只有方法的声明,没有方法体;
    25     public abstract void eat1();
    26     
    27     public void walk() {
    28         System.out.println("走了");
    29     }
    30 }
    31 class student7 extends Persons7{
    32 
    33     @Override
    34     public void eat1() {
    35         // TODO Auto-generated method stub
    36         System.out.println("学生多吃有营养的");
    37     }
    38     
    39 }

     抽象类的匿名子类:

     1 public class Day15AnonymousSubClass10 {
     2     public static void main(String[] args) {
     3         method(new Student());//匿名对象
     4         Worker worker = new Worker();
     5         method1( worker);//非匿名的类的非匿名的对象
     6         method1(new Worker());//非匿名的类的匿名对象
     7         Persons7 p = new Persons7() {//创建了一匿名子类的对象
     8 
     9             @Override
    10             public void eat1() {
    11                 // TODO Auto-generated method stub
    12                 
    13             }
    14             
    15         };
    16         
    17         method1(new Persons7() {//创建了一匿名子类的匿名对象
    18 
    19             @Override
    20             public void eat1() {
    21                 // TODO Auto-generated method stub
    22                 
    23             }
    24             
    25         });
    26     }
    27     
    28     public static void method(Student s) {
    29         
    30     }
    31     public static void method1(Persons7 p) {
    32         p.eat1();
    33         p.walk();
    34     }
    35     
    36     
    37 }
    38 class Worker extends Persons7{
    39 
    40     @Override
    41     public void eat1() {
    42         
    43     }
    44     
    45 }
  • 相关阅读:
    一个datagrid中嵌入checkBox典型的例子
    堆排序算法
    堆排序(利用最大堆)
    动态代理模式的实现
    [转载]C#如何实现对外部程序的动态调用
    9.Jmeter 多个threadgroup 中的配置元件会一次性进行初始化
    二十七。
    三十。接口2
    三十三。日志
    大道至简读后感
  • 原文地址:https://www.cnblogs.com/lixiuming521125/p/13449146.html
Copyright © 2011-2022 走看看