【JAVA】基础:面向对象:(抽象、封装、继承、多态)、方法重写、访问修饰符、关键字(this,super,static,final)、抽象、接口

面向对象概念:
面向过程:完成一件事情任何过程自己亲力亲为。
面向对象:找能完成这件事的对象。在java中就是找对象,调方法。
面向对象特征:抽象,封装,继承,多态

类和对象的关系:
类:生活中事物的统称,如动物,车,服装,食品…
对象:就是类下面实实在在存在的个体,如动物类的对象就是:猫,狗,牛,羊…
万事万物皆对象。
类是对象模板,对象是类下面其中一个真实存在的个体。

抽象:
找出一些事物的相似和共性之处,把现实生活中的对象,抽象为类。
属性对应类中变量,行为对应类中方法。

package com.test.demo;

public class Car {
	/*
	 * 描述颜色
	 *  1.public 权限修饰符,公开的,所有都能访问
	 *  2.属性可以在这里赋值,也可以不赋值,等创建对象后用对象名.属性名赋值 
	 *  如:Car car=new Car(); car.color="红色"; 
	 *   也可以用匿名对象类简写 
	 *  如:new Car().color="红色";
	 */
	public String color = "红色";

	/*
	 * 描述轮胎数 
	 * private 权限修饰符,私有的,封装就是用这个关键字。
	 *  需要提供对外访问的方法才能访问 get:获取值 set:赋值
	 */
	private int num = 4;

	public int getNum() {//获取值的方法
		return num;
	}

	public void setNum(int num) {//赋值的方法
		this.num = num;
	}

	// 行为
	public void run() {
		System.out.println("跑");
	}

	// 无参构造器
	public Car() {

	}

	// 有参构造器 创建时调用这个构造器可直接赋值 如:Car car=new Car("红色",4);
	public Car(String color, int num) {
		super();
		this.color = color;
		this.num = num;
	}

}

成员变量和局部变量、全局变量:
成员变量:类的属性,作用于整个类中。在堆内存中,因对象存在才在内存中存在。
局部变量:作用于函数中或者语句中。存在栈内存中。
全局变量:整个程序。

栈:局部变量,也就是方法里的基本数据类型。
堆:new 出来的数据。复杂的基本类型,就是对象。

封装:
属性私有化,不让外部访问,再提供公开的方法来访问我们的私有属性。
用paivate关键字修饰属性,再提供set get方法赋值或取值。

/*
	 * 描述轮胎数 
	 * private 权限修饰符,私有的,封装就是用这个关键字。
	 *  需要提供对外访问的方法才能访问 get:获取值 set:赋值
	 */
	private int num = 4;

	public int getNum() {//获取值的方法
		return num;
	}

	public void setNum(int num) {//赋值的方法
		this.num = num;
	}

继承:
所谓的继承本质就是代码的拷贝,通过关键字extends来实现。java的所有类默认继承自Object类。
还是刚才的例子,Benz继承自Car类后,里面就有了父类的属性和方法。
在这里插入图片描述

多态:
一种对象有多种形态,父类对象存放子类数据。
父类引用指向指向子类对象。
( 重写,重载都属于多态)在这里插入图片描述
注意:数据类型转换,大转小需要强制转换。
如:double变int,double num2; int num=(int)num2;

方法的重写:
必须是有继承关系,子类觉得父类的某一个方法不好,把他的方法体进行了重新编写代码,也叫方法的复写,方法的覆盖。
注意:重写,方法名,返回值类型,参数都必须一样,只有方法里的代码不一样。
在这里插入图片描述
在这里插入图片描述

访问修饰符:
规定我们的类、方法、属性的访问权限的关键字。

修饰符 访问级别 作用域
public 公开的 就是所有类都可以访问
private 私有的 只有自己可以访问
protected 受保护的 同包可以访问,当前类,子类可以访问
default、friendly 默认的 同包,同类可以访问

关键字:

关键字 作用
this 指代当前对象的引用
super 指代当前对象父类的引用
static 静态的,可修饰代码块、方法、属性 。一般staitc的属性或者方法都是public的。只要是static修饰的属性和方法,就一定会先分配内存空间。staitc方法的调用方式就是类名.方法名();static修饰的属性和方法永远只有独一份,和对象无关。static叫做类数据,和对象无关。 非static叫对象,和类无关。 非静态方法可以访问静态变量和非静态变量 。静态方法不能出现this关键,静态方法加载在创建对象之前静态方法就不能访问非静态变量。
final 永久的,长久的,可以修饰类,方法,属性。1.修饰类,表示类不能被继承。2.修饰方法:表示方法不能被重写。3.修饰变量,表示值不能被修改,就是常量的意思

抽象(方法,类): 用 abstract修饰
抽象方法:
访问修饰符 abstract 返回值 方法名(参数。。。。); 一定不能有方法体
抽象类:
public abstract class 类名{ }
注意:抽象方法必须存在于抽象类里面;子类必须重写父类的抽象方法。

接口:
接口就是一个高级的抽象类, 里面只可以写抽象方法。
接口的属性默认是public final的
接口的方法默认是public abstract
接口就是给他的子类定义了一个方法的模板,接口是一定需要实现的(用关键字implements),不实现,接口不具备任何意义。
普通类是可以创建对象的, 抽象类和接口是不能创建对象,也就是不能new它。只能new接口的实现类,这也是多态的体现。

补充:
加载顺序:
父类静态代码块,父类静态变量,父类静态方法, 子类静态代码块 ,子类静态变量,子类静态方法

父类代码块,父类构造器 子类代码块,子类构造器

猜你喜欢

转载自blog.csdn.net/qq_42755008/article/details/85162569