Java学习—从入门到精通【1】面向对象程序设计(1)

一.面向对象的特征

1.封装:

    一种信息隐蔽技术(属性私有化),提供公共方法访问私有对象。封装有以下优点:

    ①隐藏类的实现细节

    ②可加入控制逻辑,限制对属性的不合理操作

    ③便于修改,增强代码的可维护性

2.继承:

    一般类与特殊类之间的关系。继承允许类继承另一个类的属性和方法。首先拥有反映事物一般特性的类,然后在其基础上派生出反应特殊事物的类。

    若一个子类只允许继承一个父类,则成为单继承;若允许继承多个父类,则成为多继承。Java语言通过接口(interface)的方式来弥补由于Java不支持多继承而带来的子类不能享用多个父类成员的缺点。

3.多态:

    “一种定义,多种实现”,同一类事物表现出多种形态。

    多态是允许程序中出现重名现象。当父类的某个方法被多个子类重写后,将不同的子类对象赋值给父类对象的引用,可以产生不同的功能。

Java中的两种多态形式:

①方法重载:一个类中允许多个方法使用同一个名字,但方法的参数不同,完成的功能也不同。

②子类对象可以与父类对象进行相互转换,而且根据其使用的子类不同,完成的功能也不同。

4.抽象:

    从许多事物中,舍弃个别的、非本质的属性,抽取出共同的、本质的属性的过程。抽象的角度取决于分析问题的目的。

二.类与对象

1.定义类

public class Person {

	String name;    //属性
	int age;
	public void say() {    //方法
		System.out.println("我的名字叫"+name+",今年已经"+age+"岁了!");
	}
}

其中

public为访问控制符,用于限定声明的类在多大范围内可以被其他的类访问,主要还有默认访问控制符(无关键字)。

2.创建&使用对象

类名 对象名称 = null;    //声明对象
对象名称 = new 类名();    //实例化对象
类名 对象名称= new 类名();    //在声明对象的同时实例化对象
public class Person {

	String name;
	int age;
	public void say() {
		System.out.println("我的名字叫"+name+",今年已经"+age+"岁了!");
	}
}

public class ClassDemo01{
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = p1;
	}
}

类是一种引用数据类型,这与数组一样。类的属性需要内存来存储。执行Person p1 = null 时,Java系统会在栈内存开辟一个空间给对象p1,程序继续向下执行到p1 = new Person()时,Java系统会在栈内存开辟空间保存对象p1属性的内容。

在类中,一个对象创建时,编译器会为对象的各类型的成员变量进行初始化,无论是基本数据类型还是引用数据类型。

package com.imooc;

public class Person {

	String name;
	int age;
	public void say() {
		System.out.println("我的名字叫"+name+",今年已经"+age+"岁了!");
	}
}

public class ClassDemo01{
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = p1;
	}
}

    使用private关键字对name和age属性进行隐藏,那么只能在本类中才能访问name和age属性,其他类是无法访问的。

使用set()和get()方法

public class Person {

	private String name;
	private int age;
	public void setName(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void say() {
		System.out.println("我的名字叫"+name+",今年已经"+age+"岁了!");
	}
}

public class ClassDemo03{
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.setName("Hua");
		p1.setAge(20);
		p1.say();
	}
}

3.匿名对象

    匿名对象是指没有栈空间的对象,即没有明确给出名字的对象。因为没有对应的栈内存空间引用,所以对象只能使用一次。

4.构造函数

    同C++规则,构造函数主要作用是为类中的属性初始化,所以使用构造方法就可以初始化成员属性。

public class Person {

	private String name;
	private int age;
	public Person(String n,int a) {
		// TODO Auto-generated constructor stub
		name = n;
		age = a;
	}
	public void say() {
		System.out.println("我的名字叫"+name+",今年已经"+age+"岁了!");
	}
}

public class ClassDemo04{
	public static void main(String[] args) {
		Person p1 = new Person("Hua",20);
		p1.say();
	}
}

注意:只有调用new关键字实例化对象时,才会调用构造函数。

    类必须存在构造函数,类中没有用户自定义的构造方法时,Java会自动提供一个默认的构造方法。默认构造方法是一个无参的,什么都不做的构造函数。默认构造方法可以进行对象的实例化操作,但不能对成员属性初始化。有一点需注意,一旦用户自定义了构造方法,那么Java就不会自动提供默认的构造方法。

猜你喜欢

转载自blog.csdn.net/vincemar/article/details/80377077