zoukankan      html  css  js  c++  java
  • Java

    类的加载:

    public class Animal {
        public String test = "父类的属性";
        public static String testStatic = "父类的静态属性";
    
        public Animal(){
            System.out.println("父类的无参数构造方法");
        }
    
        static {
            Animal.testStatic();
            System.out.println("父类的静态代码块");
        }
    
        {
            this.test();
            System.out.println("父类的代码块");
        }
    
        public static void testStatic(){
            System.out.println("我是父类的静态方法");
        }
    
        public void test(){
            System.out.println("我是父类中的普通方法");
        }
    }
    
    public class Person extends Animal {
        public String test = "子类的属性";
        public static String testStatic = "子类的静态属性";
    
        public Person(){
            System.out.println("子类的无参数构造方法");
        }
    
        static {
            Person.testStatic();
            System.out.println("子类的静态代码块");
        }
    
        {
            this.test();
            System.out.println("子类的代码块");
        }
    
        public static void testStatic(){
            System.out.println("我是子类中的静态方法");
        }
    
        public void test(){
            System.out.println("我是子类中的普通方法");
        }
    }
    
    public class Test {
        public static void main(String[] args){
            Person person = new Person();
            person.hashCode();
        }
    }
    
    执行结果:
        我是父类的静态方法
        父类的静态代码块
        我是子类中的静态方法
        子类的静态代码块
        我是子类中的普通方法
        父类的代码块
        父类的无参数构造方法
        我是子类中的普通方法
        子类的代码块
        子类的无参数构造方法

      存在继承关系的类 加载机制 及执行过程
       加载类的过程---静态元素已经加载
             new Person();
       1.加载父类
       2.父类会产生自己的静态空间   属性 方法 块
        执行静态块
       3.加载子类
       4.子类会产生自己的静态空间   属性 方法 块
        执行静态块
       5.开辟对象空间
       6.加载父类的非静态成员   属性 方法 块 构造方法
       7.    执行块  执行父类构造方法
       8.加载子类的非静态成员   属性 方法 块 构造方法
       9.    执行块  执行子类构造方法
       10.将对象空间的地址引用交给 变量来存储

     抽象类(abstract)

             在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

      由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

      父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

      在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

    1.可以修饰什么

        修饰方法

          用abstract修饰符修饰的方法,叫抽象方法,只有方法结构,没有方法执行体

          注意native修饰的方法虽然也没有方法体,但是不是抽象方法,只是执行过程是其他语言写的(看不见)

        修饰类

          用abstract修饰符修饰的类叫做抽象类

    2.修饰后有什么特点

      抽象类中不是必须含有抽象方法

      抽象方法必须放在抽象类中(或者接口中),普通类中不允许含有抽象方法。

    3.抽象类里面有什么

      属性:可以含有一般的属性,也可以含有private、static、final等

      方法:可以含有一般的方法,也可以含有private、static、final等

      块:可以含有一般的程序块,也可以含有static程序块

      构造方法:可以含有构造方法,包括重载

    4.抽象类如何使用

      抽象类含有构造方法,但是我们不能通过调用构造方法直接创建对象。

      抽象类只能通过子类单继承来做事

    5.类和类的关系

      抽象类 ------ 直接单继承 ------ 抽象类             可以

      抽象类 ------ 直接单继承------具体类      可以

      具体类------ 直接单继承------抽象类    不可以(将父类的抽象方法具体化  或子类也变成抽象类)

      抽象类中可以没有抽象方法,全部都是具体成员

      抽象类中可以没有具体成员,全部都是抽象方法

      接口可以理解为抽象到极致------>还是一个类的结构   不能用class修饰 改用interface修饰

     
    接口(通常是为了定义规则)
        接口也是一个类的结构  只不过 用interface修饰,替换原有的class
      1.有什么  成员
         属性 不能含有一般属性  只能含有公有的静态的常量  public static final
         方法 不能含有一般方法  只能含有公有的抽象的方法(1.8 defualt修饰具体方法)
         块 不能含有一般程序块  也不能含有static块(块本身就是具体的 接口中不让有具体的)
         构造方法 不能含有构造方法
      2.如何使用  创建对象
         不能创建对象
         只能通过子类多实现(implements)来做事
         public class A implements B,C,D{
       }
      3.与别的类结构关系
         接口不能继承别的类  最抽象
         抽象类----直接多实现----接口 可以
         具体类----直接多实现----接口 不可以(必须将接口中的抽象方法具体化 自己变成抽象类)
         *接口---多继承---接口 可以直接多实现

    1.接口不能继承接口?可以

    2.接口能不能实现接口?不可以

    3.抽象类能不能实现接口?可以,但是抽象类也可以不实例化方法

    4.接口类中能否定义属性?可以,但必须初始化

  • 相关阅读:
    阿里云API网关(1)服务网关的产品概述
    Spring Security 入门(1-1)Spring Security是什么?
    Spring Security入门(2-1)Spring Security
    gradle入门(1-5)创建并运行Web应用
    gradle入门(1-4)多项目构建实战
    gradle入门(1-3)使用gradle开发一个发布版本
    gradle入门(1-2)gradle的依赖管理
    gradle入门(1-1)gradle的概念和使用
    BZOJ1925: [Sdoi2010]地精部落(dp)
    BZOJ1812: [Ioi2005]riv(树形dp)
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11093712.html
Copyright © 2011-2022 走看看