类包含了数据与方法,将数据与方法放在一个类中就构成了封装(通常来讲,将属性私有化,而且生成setter和getter方法)。它指的是将对象的状态信息隐藏在对象内部,不容许外部程序直接访问对象的内部信息,而是经过该类所提供方法来实现对内部信息的操做和访问。把隐藏的东西隐藏,将该暴露的东西暴露.通常是经过访问控制符完成封装。java
Java中的访问权限控制符有四个.
做用域 当前类 同一package 子孙类 其余package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
没有时默认为friendly,如构造函数等~
在Java语言中有4种访问修饰符:package(默认)、private、public和protected.
1。package是默认的保护模式,又叫作包访问,没有任何修饰符时就采用这种保护模式。包访问容许域和方法被同一个包内任何类的任何方法访问。(包内访问)
2。private标识的访问模式,表示私有的域和方法只能被同一个类中的其余方法访问,实现了数据隐藏;必要时,能够经过方法访问私有变量。(类内访问)
3。public修饰符用于暴露域和方法,以便在类定义的包外部能访问它们。对包和类中必要的接口元素,也须要使用这个级别;main()方法必须是public的,toString()方法也必须是public的。通常不会用public暴露一个域,除非这个域已经被声明为final。(跨包访问)
4。protected修饰符提供一个从包外部访问包(有限制)的方法。在域和方法前增长protected修饰符不会影响同一个包内其余类和方法对它们的访问。要从包外部访问包(其中含有protected成员的类),必须保证被访问的类是带有protected成员类的子类。也就是说,但愿包中的一个类被包以外的类继承重用时,就可使用这个级别。通常应该慎用。(包中类被包外类继承重用)函数
new关键字所作的工做:学习
① 为对象开辟内存空间
② 调用类的构造方法
③ 将生成的对象的地址返回this
方法与属性的分配:spa
若是一个类包含了属性和方法,那么该类的每个对象都有本身的属性,可是不管有多少个对象,这些对象共享一个方法。.net
重载:code
构造方法重载时,只需看参数便可。orm
使用this():对象
在一个构造方法中调用另一个构造方法,可使用this(),this()中的参数根据调用的构造函数肯定。this()语句必须做为构造方法的第一条语句blog
Java是单继承的,意味着一个类只能继承一个父类,使用extends关键字。
继承关系中构造方法的调用:
生成子类对象时,Java默认地首先调用父类的不带参数的构造方法,并执行该构造方法,生成父类的对象。接下来才是调用子类的构造方法,生成子类的对象。(便是想要生成子类对象,必须先生成父类的对象,没有父类的对象就没有子类的对象)
package com.blog; /** *基类 */ class SuperTest { private String age; public SuperTest(String age) { this.age = age; System.out.println(this.age); } public String getAge() { return age; } public void setAge(String age) { this.age = age; } } /** *导出类 */ public class Test extends SuperTest{ private String name; public Test(String age,String name) { super(age); //调用基类的构造方法. this.name = name; System.out.println(this.name); } public static void main(String[] args) { Test test = new Test("50", "itcast"); } } //output:50 itcast ~~//
使用super关键字:
super表示对父类对象的引用。
使用了super显示的调用父类的某个构造方法后,那么在执行的时候就寻找super()对应的构造方法而再也不寻找父类的不带参数的构造方法。super必须做为构造方法的第一条执行语句。
① 父类有的,子类也有
② 父类没有的,子类能够有
③ 父类有的,子类能够改变
① 构造方法不能被继承
② 方法和属性能够被继承
③ 子类的构造方法隐式地调用父类的无参构造方法,即java.lang.Object是被默认继承的.
④ 当父类没有不带参数的构造方法时,子类须要使用super关键字来显示调用父类的构造方法。super指的是父类的引用
⑤ super关键字必须是构造方法中的第一句。
当两个方法造成重写关系时,能够在子类中经过super关键字调用父类被重写的方法。此时的super关键字没必要放在第一句,而是根据逻辑决定。
多态指的是父类型的引用能够指向子类的对象。(苹果是水果,足球是球).Java中的引用变量有两种, 一种是编译时类型由声明该变量时使用的类型决定,还有一种是运行期类型由实际赋给变量的对象决定.若是编译时和运行时类型不一致,就会出现多态.
Parent p = new Child();
p.execute();
当使用多态调用方法时,首先检查父类中是否有被调用的方法,若是没有则编译出错;若是有,再去调用子类的方法。
① 向上类型转换(upcast):将子类型转换成父类型。对于向上类型转换,不须要显示指定:
Parent p = new Child();
② 向下类型转换(downcast):将父类型转换为子类型。对于向下类型转换,必需要显示指定,使用强制类型转换:
Parent p = new Child();
Child child = (Child)p;
如下的编译不会出错,运行时颇有能报错(ClassCastException):
Parent p = new Parent();
Child child = (Child)p;
若是用instaceof判断一下是否属于类或者子类的一个实例.
if(child instaceof Parent){
Child child = (Child)p;
}
继承是实现类重用的重要手段,可是它会带来一个大的坏处:破环封装.相比之下,组合也是实现类重用的方式.而采用组合方式可以更好的提供类的封装.
ps:Java中面向对象思想其实不难理解,可是有的时候又很是让人头疼.我只是总结一点经常使用的知识点.其实还有不少本身到如今还搞不明白.计算机将现实中的东西抽象出来的思惟.本身理解的还不够透彻....
----------------------- JavaEE/物联网技术交流、java培训、java学习型技术博客、期待与您交流! ----------------------