Java基础笔记 -------------面向对象上(三大特性)

面向对象三个特性:继承(Inheritence)、封装(Encapsulation)、多态(Polymorphism).

1、封装(Encapsulation):

类包含了数据与方法,将数据与方法放在一个类中就构成了封装(通常来讲,将属性私有化,而且生成settergetter方法)。它指的是将对象的状态信息隐藏在对象内部,不容许外部程序直接访问对象的内部信息,而是经过该类所提供方法来实现对内部信息的操做和访问。把隐藏的东西隐藏,将该暴露的东西暴露.通常是经过访问控制符完成封装。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成员类的子类。也就是说,但愿包中的一个类被包以外的类继承重用时,就可使用这个级别。通常应该慎用。(包中类被包外类继承重用)
函数

1.1、对象在堆中的分配:

new关键字所作的工做:学习

为对象开辟内存空间
调用类的构造方法
将生成的对象的地址返回this

方法与属性的分配:spa

若是一个类包含了属性和方法,那么该类的每个对象都有本身的属性,可是不管有多少个对象,这些对象共享一个方法。.net

1.2、封装中的构造方法(重载):

重载:code

构造方法重载时,只需看参数便可。orm

使用this()对象

在一个构造方法中调用另一个构造方法,可使用this()this()中的参数根据调用的构造函数肯定。this()语句必须做为构造方法的第一条语句blog

2、继承(Inheritence):

Java是单继承的,意味着一个类只能继承一个父类,使用extends关键字。

2.1、继承中的构造方法:

继承关系中构造方法的调用:

生成子类对象时,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必须做为构造方法的第一条执行语句。

2.2、继承中父类与子类的关系:

父类有的,子类也有
父类没有的,子类能够有
父类有的,子类能够改变

2.3、继承中须要注意的:

构造方法不能被继承
方法和属性能够被继承
子类的构造方法隐式地调用父类的无参构造方法,即java.lang.Object是被默认继承的.
当父类没有不带参数的构造方法时,子类须要使用super关键字来显示调用父类的构造方法。super指的是父类的引用
super关键字必须是构造方法中的第一句。


2.4、继承中的方法重写:

当两个方法造成重写关系时,能够在子类中经过super关键字调用父类被重写的方法。此时的super关键字没必要放在第一句,而是根据逻辑决定。

3、多态(Polymorphism):

多态指的是父类型的引用能够指向子类的对象。(苹果是水果,足球是球).Java中的引用变量有两种, 一种是编译时类型由声明该变量时使用的类型决定,还有一种是运行期类型由实际赋给变量的对象决定.若是编译时和运行时类型不一致,就会出现多态. 

Parent p = new Child();

p.execute();

3.1、使用多态调用方法:

当使用多态调用方法时,首先检查父类中是否有被调用的方法,若是没有则编译出错;若是有,再去调用子类的方法。

3.2、多态中的两种类型转换:

向上类型转换(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;

  }

4、继承和组合

     继承是实现类重用的重要手段,可是它会带来一个大的坏处:破环封装.相比之下,组合也是实现类重用的方式.而采用组合方式可以更好的提供类的封装.

5、Java初始化顺序

  ps:Java中面向对象思想其实不难理解,可是有的时候又很是让人头疼.我只是总结一点经常使用的知识点.其实还有不少本身到如今还搞不明白.计算机将现实中的东西抽象出来的思惟.本身理解的还不够透彻....

----------------------- JavaEE/物联网技术交流java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima

相关文章
相关标签/搜索