抽象类、抽象方法与代码块
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 + "]"; } }
posted on 2017-07-21 20:41 superficial。 阅读(403) 评论(0) 编辑 收藏 举报