Abstract学习

Abstract入门

package com.xz.abstract_;public class Abstract01 {public static void main(String[] args) {}
}abstract class Animal {private String name;public Animal(String name) {this.name = name;}//思考:这里eat这里你实现了,其实没有什么意义//即: 父类方法不确定性的问题//===>考虑将该方法设计为抽象(abstract)方法//===> 所谓抽象方法就是没有实现的方法//===> 所谓没有实现就是指,没有方法体//===>当一个类中存在 抽象方法时,需要将该类声明为abstract类//===>一般来说,抽象类会被继承,由其子类来实现抽象方法
//    public void eat(){//        System.out.println("这是一只动物,但是不知道吃什么...");
//    }public abstract void eat();
}
package com.xz.abstract_;public class AA extends Template{public void job() {long count = 0;for (long i = 1; i <= 800000; i++) {count += i;}}
}
package com.xz.abstract_;public class BB extends Template {public void job() {long count = 0;for (long i = 1; i <= 80000; i++) {count *= i;}}
}
package com.xz.abstract_;public abstract class Template {public abstract void job();public void calTime() {//得到开始的时间long start = System.currentTimeMillis();job();//动态绑定机制//得到结束的时间long end = System.currentTimeMillis();System.out.println("运行时间为:" + (end - start));}
}
package com.xz.abstract_;public class TestTemplate {public static void main(String[] args) {AA aa = new AA();aa.calTime();BB bb = new BB();bb.calTime();}
}
package com.xz.abstract_;public class AbstractDetail01 {public static void main(String[] args) {//抽象类不能被实例化
//        A a = new A();}
}//1)抽象类不能被实例化
abstract class A {}//2)抽象类不一定要包含abstract方法。 也就是说抽象类可以没有abstract方法
abstract class B {}//3)一旦类包含 了abstract方法,则这个类必须声明为abstract
abstract class C {public abstract void say();
}//4) abstract只能修饰类和方法,不能修饰属性和其它的。
class D{//    public abstract int n1 = 10;
}

AbstractDetail

package com.xz.abstract_;public class AbstractDetail01 {public static void main(String[] args) {//抽象类不能被实例化
//        A a = new A();}
}//1)抽象类不能被实例化
abstract class A {}//2)抽象类不一定要包含abstract方法。 也就是说抽象类可以没有abstract方法
abstract class B {}//3)一旦类包含 了abstract方法,则这个类必须声明为abstract
abstract class C {public abstract void say();
}//4) abstract只能修饰类和方法,不能修饰属性和其它的。
class D{//    public abstract int n1 = 10;
}

AbstractExercise

package com.xz.abstract_;public class AbstractExercise01 {public static void main(String[] args) {CommonEmployee commonEmployee = new CommonEmployee("jack", "jackie", 5000);commonEmployee.work();Manager manager = new Manager("xz", "zeaper", 10000, 5000);manager.work();}
}abstract class Employee {public String name;public String id;public double sal;public Employee() {}public Employee(String name, String id, double sal) {this.name = name;this.id = id;this.sal = sal;}public abstract void work();
}class CommonEmployee extends Employee {public CommonEmployee(String name, String id, double sal) {super(name, id, sal);}@Overridepublic void work() {System.out.println("普通员工" + name + "工作中...");}
}class Manager extends Employee {public double bonus;public Manager(String name, String id, double sal, double bonus) {super(name, id, sal);this.bonus = bonus;}@Overridepublic void work() {System.out.println("经理" + name + "工作中...");}
}

CodeBlock学习

CodeBlock入门

package com.xz.codeblock_;public class CodeBlock01 {public static void main(String[] args) {Movie movie1 = new Movie("你好,李焕英");System.out.println("==============");Movie movie2 = new Movie("唐探3",30);System.out.println("==============");Movie movie3 = new Movie("速激9",50,"林诣彬");}
}class Movie {private String name;private int price;private String directer;{System.out.println("广告开始播放...");System.out.println("电影开始播放...");System.out.println("电影播放完毕...");}public Movie(String name) {System.out.println("name");this.name = name;}public Movie(String name, int price) {System.out.println("name + price");this.name = name;this.price = price;}public Movie(String name, int price, String directer) {System.out.println("name + price + directer");this.name = name;this.price = price;this.directer = directer;}
}

CodeBlockDetail01

package com.xz.codeblock_;public class CodeBlockDetail {public static void main(String[] args) {//类 被加载的时候 静态代码块会被执行//以下三种情况类会被加载//1.创建对象实例时//A a = new A();//2.创建子类对象实例,父类代码块也会被加载//A a1 = new A();//3.使用类的静态成员时(静态属性、静态方法)
//        System.out.println(Dog.n1);//静态代码块只会被执行 (类只会加载一次)一次
//        System.out.println(Dog.n1);//普通代码块 被创建一次 就会就会调用一次
//        DD dd1 = new DD();
//        DD dd2 = new DD();//如果只是使用类的静态成员,普通代码块并不会执行System.out.println(DD.num);}
}class DD {public static int num = 999;static {System.out.println("DD的静态代码块被执行...");System.out.println("=================");}//在new对象时会被调用,每加载一次就会被执行一次//可以这样简单理解:普通代码块是构造器的一种补充机制,构造器没被调用,普通代码块也不会被调用{System.out.println("DD的普通代码块被执行...");}
}class Dog {public static int n1 = 10;static {System.out.println("Dog的代码块被执行...");System.out.println("=================");}
}class A extends B {static {System.out.println("A的代码块被执行...");System.out.println("=================");}
}class B {static {System.out.println("B的代码块被执行...");System.out.println("=================");}
}

CodeBlockDetail02

package com.xz.codeblock_;public class CodeBlockDetail02 {public static void main(String[] args) {AA aa = new AA();}
}//静态代码块优先级高于普通代码块
//最后执行的才是构造方法
class AA {//无参构造器public AA() {System.out.println("无参构造器被调用...");}//普通属性的初始化private int n2 = getN2();{System.out.println("普通代码块被执行...");}private int getN2() {System.out.println("getN2被调用...");return 200;}//属性初始化和静态代码块执行优先级一样//所以系统会按顺序执行//属性初始化private static int n1 = getN1();//静态代码块static {System.out.println("静态代码块被执行....");}public static int getN1() {System.out.println("getN1被调用...");return 100;}
}

Final关键字学习

fianl关键字入门

package com.xz.final_;public class Final01 {public static void main(String[] args) {E e = new E();
//        e.TAX_RATE=0.09;}
}//1.不希望被继承,可加final
final class A {}//class B extends A{//}//2.不希望父类某个方法被子类覆盖/重写
class C {public final void say() {System.out.println("say()...");}
}//class D extends C {//    @Override
//    public void say() {//        super.say();
//    }
//}//3.不希望某个属性的值被修改
class E {public final double TAX_RATE = 0.08;
}//4.不希望某个局部变量被修改
class F {public void hi() {final double TAX_RATE = 0.08;
//        TAX_rate = 0.09;System.out.println(TAX_RATE);}
}

FinalDetail01

package com.xz.final_;public class FinalDetail {public static void main(String[] args) {CC cc = new CC();EE ee = new EE();ee.say();}
}class AA {/**  final修饰的常量可赋值的地方*  1. 定义时*  2. 构造器*  3. 代码块*/public final double TAX_RATE1 = 0.08;public final double TAX_RATE2;public final double TAX_RATE3;public AA(double TAX_RATE2) {this.TAX_RATE2 = 12.5;}{TAX_RATE3 = 8.8;}}class BB {/**  如果final定义的属性是静态的,则初始化的位置只能是*  1. 定义时*  2. 静态代码块*  不能在构造器中赋值*/public static final double TAX_RATE1 = 0.08;public static final double TAX_RATE2;static {TAX_RATE2 = 8.8;}
}//final类不能继承,但是可以实例化对象
class CC {}//如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承
//即  仍然遵守继承的机制
class DD {public final void say() {System.out.println("say()...");}}class EE extends DD {}

FinalDetail02

package com.xz.final_;public class FinalDetail02 {public static void main(String[] args) {//代码块不会被执行System.out.println(CCC.rate);}
}//5)一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。
final class AAA {//    public final void say(){//        System.out.println("say()...");
//    }
}//6) final不能修饰构造方法(即构造器)
class BBB {public String name;//    public final BBB(String name) {//        this.name = name;
//    }
}//7) final和static往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理
class CCC {public final static double rate = 0.08;static {System.out.println("代码块...");}
}//8)包装类(Integer,Double,Float, Boolean等都是final),String也是final类,不可以被继承。
//class DDD extends String{}

Java抽象类(abstract)相关推荐

  1. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  2. Java抽象类(Abstract Class)与接口(Interface)区别

    抽象类与接口比较 抽象类跟接口类似,都不能实例化,可能包含不需实现方法或已实现的方法. 抽象类可以定义一些不是静态或常量的字段,定义 public, protected, private访问级别的具体 ...

  3. 晋南讲堂之Java抽象类(abstract)与接口(interface)区分

    抽象类(abstract)和接口(interface)的对比 1. 抽象类(abstract)   我们一般声明一个抽象类按照如下形式: abstract class ClassName{//成员变量 ...

  4. JAVA抽象类——abstract

    1. 抽象方法 如果父类中一定含有某个方法,但如何实现并不能确定,这就应该是一个抽象方法. 如父类是图形,方法是计算图形的面积,因为每一种图形都有不同的面积计算公式,所以如何计算图形的面积不能确定,那 ...

  5. java抽象类_Java抽象类

    java抽象类 Abstract class in Java is similar to interface except that it can contain default method imp ...

  6. Java接口和Java抽象类(转,原文已被删除)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  7. Java抽象类(abstract)、final关键字

    抽象类 (abstract) 抽象类的特点: 抽象类为继承而生 抽象方法不能有代码体 子类要想继承父类 就必须要重写父类的全部抽象方法 Father.java public abstract clas ...

  8. Java中抽象类 abstract和interface的区别

    abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...

  9. java 抽象类 模板_Java学习day21-抽象类(abstract class)和模板设计模式(TemplateMethod)...

    一.抽象类(abstract class) 1.随着继承层次中一个个新子类的定义,类变的越来越具体,而父类则更一般.更通用.类的设计应该保证父类和子类能够共享特征.有时需要将一个父类设计的非常抽象,以 ...

  10. Java 面向对象 之 抽象类 abstract

    转载于 : http://www.verejava.com/?id=16992804621647 /**知识点: 抽象类 abstract题目: 爸爸叫我买一斤水果和一条鱼思路:1. 抽象出类:爸爸( ...

最新文章

  1. 在EXE和DLL中,FindResource的区别
  2. 巨头的转身 ARM阵营开始烧英特尔的后院
  3. TREK1000 评估套件的软件技术分析
  4. canvas入门-1三种填充方式、渐变、模式
  5. java字符串常量池长度_Java String类相关知识梳理(含字符串常量池(String Pool)知识)...
  6. 2019年开源数据库报告发布:MySQL仍卫冕!
  7. python语法用到了什么_Python语法的使用和简介
  8. java编写Linux文件共享,ubuntu下用samba实现windows与linux文件共享
  9. python复制文件夹不阻塞_Python线程,线程不阻塞
  10. MySQL基于复制的架构方案
  11. UTF与ascii区别
  12. Ti-Click:通过浏览器快速搭建 TiDB 在线实验室 | Ti-可立刻团队访谈
  13. texstudio语法检查
  14. 完全卸载SQL server 2005的方法
  15. k8s中使用基于nfs的storageclass
  16. 如何控制H5 video 只能后退(向后拖动)不能快进(向前拖动)
  17. 美国孩子上学真像你以为的那么轻松吗?
  18. ios真机调试,iTunes检测得到,hbuilder未检测到手机和模拟器的解决办法
  19. 【重温SSM框架系列】1 - Spring快速入门(配置文件及API详解)
  20. rk3288_android7.1 随机生成SN号问题

热门文章

  1. RabbitMQ面试要点
  2. python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】
  3. ios王者荣耀服务器维护31号,王者荣耀iOS还在维护怎么回事 3月31日王者荣耀IOS什么时候能上...
  4. spring 事务回调
  5. Locally Differential for Frequency Estimation
  6. 我们仨——快乐的湘军
  7. mac安装jekyll
  8. 解不等式之调和级数不等式
  9. Linux服务器绑定mac与ip,Linux实现ip和mac绑定
  10. 可以旅游了_原水_新浪博客