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

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

1、封装(Encapsulation):

类包含了数据与方法,将数据与方法放在一个类中就构成了封装(一般来说,将属性私有化,并且生成settergetter方法)。它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类所提供方法来实现对内部信息的操作和访问。把隐藏的东西隐藏,将该暴露的东西暴露.一般是通过访问控制符完成封装。

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关键字所做的工作:

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

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

方法与属性的分配:

如果一个类包含了属性和方法,那么该类的每一个对象都有自己的属性,但是无论有多少个对象,这些对象共享一个方法。

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

重载:

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

使用this()

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

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初始化顺序

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

  ps:Java中面向对象思想其实不难理解,但是有的时候又非常让人头疼.我只是总结一点常用的知识点.其实还有很多自己到现在还搞不明白.计算机将现实中的东西抽象出来的思维.自己理解的还不够透彻....

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

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




你可能感兴趣的:(面向对象..)