面向对象的三个特性:java
封装,隐藏了类的内部实现机制,能够在不影响使用的状况下改变类的内部结构,同时也保护了数据。对外界而言,它的内部细节是隐藏的,暴露给外界的只是它的访问方法。编程
对于封装而言,一个对象所封装的是本身的属性和方法,因此不须要依赖其余对象就能够完成本身的操做。 三大好处:函数
继承所描述的是**“is-a”**的关系,若是有两个对象A和B,若能够描述为“A是B”,则能够表示A继承B,其中B被继承者称之为父类或者超类,A是继承者称之为子类或者派生类。this
实际上,子类是父类的特殊化,它除了拥有父类的特性外,还拥有本身独有的特性。同时继承关系中,子类能够替代父类,反之不行,例如猫是动物,但不能说动物就是猫。code
使用继承需注意三句话:orm
多态,指程序中定义的引用变量所指向的具体类型和经过该引用变量发出的方法调用在编程时并不肯定,而是在程序运行期间才肯定。对象
实现多态的三个必要条件:继承
实现多态的形式:接口
另外,在继承链中对象方法的调用,存在一个优先级: this.show(O) -> super.show(O) -> this.show((super)O) -> super.show((super)O)内存
使用BigDecimal,而且采用setScale()方法来设置精确度,同时使用RoundingModel.HALF_UP表示数字舍入法则。
double f = 111231.5473; BigDecimal b = new BigDecimal(f); double r = b.setScale(2, RoundingModel.HALF_UP).doubleValue();
java.text.DecimalFormat df = new java.text.DecimalFormat(" #.00"); df.format(须要格式化的数字);
注: #.00,表示两位小数 #.0000,表示四位小数
double d = 3.1415926; String result = String.format("%.2f", d);
%.2f,%.表示小数点前任意位数, 2表示两位小数,格式后的结果为f,表示浮点型
抽象类注意点:
接口,自己就不是类,是抽象类的延伸。 接口注意点:
被static修饰的成员变量和方法是独立于该类的,不依赖与某个特定的实例对象,也就是被该类的全部实例对象共享。全部实例对象的引用都指向同一个地方,任何一个实例对其的修改都会致使其余实例的变化。
static修饰的变量称之为静态变量,没有用static修饰的成为成员变量。区别是:
static修饰的方法,为静态方法,经过类名对其进行直接调用。在类加载时就存在了,不依赖于任何实例对象,因此static方法必须实现,不能是抽象方法abstract
被static修饰的代码块,成为静态代码块,随着类的加载一并执行,并且能够随意放
将一个类的定义放在另外一个类的定义内部,这就是内部类。
使用内部类的缘由:每一个内部类都能独立地继承一个接口的实现,因此不管外围类是否已经继承了某个接口的实现,对于内部类都没有影响。
接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
当咱们建立一个内部类的时候,它无形中就与外围类有了一种联系,依赖于这种联系,它能够无限制地访问外围类的元素。
java中内部类主要分为:
成员内部类,是外围类的一个成员,因此它是能够无限制的访问外围类的全部成员属性和方法,尽管是private,可是外围类要访问内部类的成员属性和方法则须要经过内部类的实例来访问。
使用注意:
局部内部类,嵌套在方法的做用域内,对于这个类的使用主要是应用与解决比较复杂的问题,想建立一个类来辅助咱们的解决方案,但又不但愿这个类是公用的。
使用static修饰的内部类,称之为静态内部类。静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成后会隐含地保存着一个外围类的引用,可是静态内部类没有。意味着: