zoukankan      html  css  js  c++  java
  • 抽象类、抽象方法与代码块

    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 + "]";
    	}
    }
    

      

  • 相关阅读:
    Windows环境下Unicode编程总结
    我的CS脚本autoexec.cfg
    完成端口与高性能服务器程序开发[引用]
    调用未知DLL中的导出函数
    兼容Vista 赛门铁克公测新杀毒软件
    I Love You的真正含义
    码根码
    木马经典十大藏身地点大搜查
    Windows调试器及不同平台符号包下载地址(收集)
    “千般路”与“磨豆腐”
  • 原文地址:https://www.cnblogs.com/gaofangquan/p/7219648.html
Copyright © 2011-2022 走看看