Java面向对象基本概念

面向对象的三个特性

封装性

封装是指两方面:

  • 把对象的属性和行为看成一个整体,将两者封装在一个不可分割的独立单位(对象)中
  • 信息隐蔽,把不需要外界知道的信息隐藏起来。

封装的另一个特点是:为封装在一个整体内的变量及方法规定了不同级别的"可见性"或访问权限。此时,必须提供getter/setter方法。

继承性:extends

首先拥有反映事物一般特性的类,再在其基础上派生出反映特殊情况事物的类。
被继承的类成为父类或超类,继承产生的类称子类或者派生类。根据继承机制,子类继承了父类所有的成员,并可以增加自己的成员。

子类构造器默认调用父类无参构造器,子类构造器中第一行默认添加super();若父类没有无参构造器,可以使用super(参数列表)手动调用父类有参构造器。

拥有同一个父类的两个子类无关。

优点:继承机制大大增强了程序代码的可复用性,提高了软件的开发效率,降低了程序产生错误的可能性,也为程序修改提供了便利。
一个子类可允许继承一个父类,而Java中通过接口实现一个子类与多个父类之间的联系。

多态性

多态是指允许程序程序中出现重名现象,具体表现为两种形式:

  1. 方法重载:在一个类中没允许多个方法使用同一个名字,单方法参数不同,完成功能也不同
  2. 对象多态:子类对象可以与父类对象互相转换,而且根据使用的子类不同,完成的功能也不同
编译时类型和运行时类型
Animal a = new Dog();
a.sleep();

Animal是Dog的父类;

a属于Animal类型,可以调用Animal中声明的方法;
a属于Dog对象,最终调用Dog中重写的方法;

  1. Animal中有sleep()声明,Dog中没有:调用Animal中的sleep
  2. Animal中没有sleep():编译出错
  3. Animal中有sleep()声明,Dog中有:调用Dog中的sleep

编译时类型(编译器) = 运行时类型(JVM)
编译时类型:决定了对象能调用哪些属性和方法
运行时类型:决定了对象最终调用的是哪个方法(先找子类,没有再找父类)

//父类
public class Animal extends Object {
	// 属性
	String name;
	String sex; 
	// 构造器
	public Animal(String name) {
		this.name = name;
		sex = "公";
	}
	public Animal() {
		
	}
	// 功能
	public void eat() {
		System.out.println("动物吃!");
	}
	public void sleep() {
		System.out.println("动物睡!");
}
//子类
public class Dog extends Animal {
	int age;
	
	public Dog() {
		// super父类对象,使用方式和this一样
		super("旺财");// 子类构造器中默认添加的
		/*super.name = "";
		super.eat();*/
	}
	
	public void wang() {
		System.out.println("汪汪!");
	}
}
public class TestFather {
	// 测试 Dog 和 Animal关系
	@Test
	public void test01() {
		// 创建一个子类对象 
		Dog d = new Dog();
		// 调用父类属性
		d.name = "小强";
		d.sex = "公";
		// 调用父类方法
		d.sleep();
		d.eat();
		// 调用子类自己的属性和方法
		d.age = 10;
		d.wang();
		// 创建一个父类对象
		Animal a = new Animal();
	}
	@Test
	public void test02() {
		// Dog的构造器空的,将成员变量初始化了
		// 初始化位置:Animal的构造器
		// 结论:子类构造器中会调用父类构造器Animal()
		Dog d = new Dog();
		System.out.println(d.name);
	}
	}

类与对象

类的构造器

在这里插入图片描述
*new用来实例化对象,构造器用来初始化成员变量

class 类名{ 成员变量、成员方法、构造方法 }

public class Cell {
//           类名
	int row; 
	int col; 
	public Cell() {//无参构造器
//成员变量		
	}
	//构造方法
	public Cell(int row, int col) {
		this.row = row; // 就近原则
		this.col = col;//this对象-当前对象
	}
	// 左移,成员方法
	public void moveLeft() {
		col --;
	}
	// 右移
	public void moveRight() {
		col ++;
	}
	// 下移
	public void drop() {
		row ++;
	}
	Cell c1 = new Cell(0, 3);// 创建方块 new, 调用了类的构造方法/构造器
	
}

Java提供了4种访问控制符,主要用于控制其他类是否可以访问某一类中的属性或方法,从而实现数据封装。四种访问控制符的权限大小(由大到小)为public(公共)、protected(保护)、default(默认)、 private(私有)。
在这里插入图片描述

对象

符合类的特征的真实个体
创建对象:new 类();
new:分配空间、创建对象并且成员变量默认值
类():调用了构造器

Java编译过程

Cell cell = new Cell();

在这里插入图片描述
xx.java -> 编译(javac编译器) -> xx.class
将xx.class文件,装载(加载)到内存中,类加载器完成 -> 运行
类加载只有一次,类信息只有一个,静态属性只有一个

猜你喜欢

转载自blog.csdn.net/Zldz33/article/details/94607280