• 抽象类、抽象方法与代码块


    abstract:抽象的,可以用来修饰类、方法

    1.abstract修饰类:抽象类
     1)不可被实例化
    2)抽象类有构造器 (凡是类都有构造器)
    3)抽象方法所在的类,一定是抽象类。
    4)抽象类中可以没有抽象方法。
    >当我们设计一个类,不需要创建此类的实例时候,就可以考虑将其设置为抽象的,由其子类实现这个类的抽象方法以后,就行实例化

     2.abstract修饰方法:抽象方法
     1)格式:没有方法体,包括{}.如:public abstract void eat();
     2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
    3)若子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以实例化
     4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!

     接口(interface) 是与类并行的一个概念
    1.接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法。
     2.接口是没有构造器的。
    3.接口定义的就是一种功能。此功能可以被类所实现(implements)。
         比如:class CC extends DD implements AA
    4.实现接口的类,必须要重写其中的所有的抽象方法,方可实例化。若没有重写所有的抽象方法,则此类仍为一个抽象类
    5.类可以实现多个接口。----java 中的类的继承是单继承的
    6.接口与接口之间也是继承的关系,而且可以实现多继承
     >5,6描述的是java中的继承的特点。
     7.接口与具体的实现类之间也存在多态性

    package day212;
    
    public class dark implements runner,flyer,swimmer{
    
    	@Override
    	public void swim() {
    		System.out.println("丑小鸭可以游泳");
    	}
    
    	@Override
    	public void fly() {
    		System.out.println("丑小鸭可以变成白天鹅");
    		
    	}
    
    	@Override
    	public void run() {
    		System.out.println("丑小鸭可以跑");
    		
    	}
    
    }
    package day212;
    
    public interface flyer {
       public void fly();
    }
    package day212;
    
    public interface runner {
      public void run();
    }
    
    package day212;
    
    public interface swimmer {
        public void swim();
    }
    package day212;
    
    public class testinteface {
    
    public static void main(String[] args) {
    		dark d=new dark();
            
            testinteface.fly(d);
            testinteface.run(d);
            testinteface.swim(d);
    	}
       public static void run(runner r){
    	   r.run();
       }
       
       public static void fly(flyer f){
    	   f.fly();
       }
       
       public static void swim(swimmer s){
    	   s.swim();
       }
    }
    

      

    代码块:是类的第4个成员
    作用:用来初始化类的属性
    分类:只能用static来修饰。

     静态代码块:

    1.里面可以有输出语句
    2.随着类的加载而加载,而且只被加载一次
    3.多个静态代码块之间按照顺序结构执行
    4.静态代码块的执行要早于非静态代码块的执行。
    5.静态的代码块中只能执行静态的结构(类属性,类方法)
    *
    非静态代码块
    1.可以对类的属性(静态的 & 非静态的)进行初始化操作,同时也可以调用本类声明的方法(静态的 & 非静态的)
     2.里面可以有输出语句
     3.一个类中可以有多个非静态的代码块,多个代码块之间按照顺序结构执行
     4.每创建一个类的对象,非静态代码块就加载一次。
     5.非静态代码块的执行要早于构造器
    *
    关于属性赋值的操作:
    ①默认的初始化
    ②显式的初始化或代码块初始化(此处两个结构按照顺序执行)
    ③构造器中;
    —————————以上是对象的属性初始化的过程—————————————
    ④通过方法对对象的相应属性进行修改

    package text3;
    
    public class diamakuai {
    
    
    public static void main(String[] age){
    	text ts=new text();
    	System.out.println(ts);
    }
      
    }
    class text{
    	  String name;
    	  int age;
    	  public text(){
    		  this.name="g";
    		  this.age=2;
    	  }
    	  {
    		  name="gao";//出事化块调方法有什么作用
    		  age=22;
    		  System.out.println("zheshiyigedaimakuai");
    	  }
    	static{
    		System.out.println("我市静态");
    		
    		
    	}
    	public String toString() {
    		return "diamakuai [name=" + name + ", age=" + age + "]";
    	}
    }
    

      

  • 相关阅读:
    129 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 02 懒汉式的代码实现
    128 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 03 饿汉模式 VS 懒汉模式 01 饿汉式的代码实现
    127 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 02 单例模式概述 01 单例模式的定义和作用
    126 01 Android 零基础入门 02 Java面向对象 06 Java单例模式 01 设计模式概述 01 设计模式简介
    125 01 Android 零基础入门 02 Java面向对象 05 Java继承(下)05 Java继承(下)总结 01 Java继承(下)知识点总结
    leetcode-----121. 买卖股票的最佳时机
    leetcode-----104. 二叉树的最大深度
    Json串的字段如果和类中字段不一致,如何映射、转换?
    Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
    模糊查询
  • 原文地址:https://www.cnblogs.com/gaofangquan/p/7219648.html
Copyright © 2020-2023  润新知