黑马程序员--Java基础--03面向对象(1)

时间:2023-02-14 00:12:50

----------- android培训java培训java学习型技术博客、期待与您交流! ------------

1.面向对象概念:

面向对象是一种对现实世界理解和抽象的方法,在此基础上看来一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。

面向对象是基于面向过程而言的,将功能封装进对象,强调了具备功能的对象,可以使我们从执行者变为指挥者,例如应聘过程,相对于招聘者来看我就是具有编程功能的对象,我自身封装了编程的方法。

 

开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系。

面向对象的特征:

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

 

2.类与对象的关系

类:是对现实世界事物的描述。

对象:就是现实事物实实在在的个体。

Java对对象共性的描述是用类体现出来的,描述事物就是描述事物的属性及行为

 

成员变量及局部变量

作用范围。

成员变量作用于整个类中。

局部变量变量作用于函数中,或者语句中。

在内存中的位置:

成员变量:在堆内存中,因为对象的存在,才在内存中存在。

局部变量:存在栈内存中。

class Person     //人的抽象描述生成人这个类
{
String name; //姓名(成员变量)
int age; //年龄
Person(String name){
this.name = name;
}
void eat(){
int i = 5; //局部变量
System.out.println("我要吃"+i+"两饭");
}
}
class Test
{
public static void main(String[] args){
//根据人这个类生成具体人,即对象
Person p1 = new Person("张三");
Person p2 = new Person("李四");
p1.eat();
p2.eat();
}
}

3.面向对象的特点

(1)封装

是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

封装的格式为:修改属性的可见性,设置set/get方法,设置属性的存取限制。

private int age;   //私有化年龄属性
public int getAge(){ //读取方法
return age;
}

public void setAge(int age){
//年龄的有效验证
if(age<0||age>200){
System.out.println("年龄不合法。。");
return;
}
this.age = age;
}

好处:

将变化隔离。

便于使用。

提高重用性。

提高安全性。

封装原则:

将不需要对外提供的内容都隐藏起来。

把属性都隐藏,提供公共方法对其访问。

注:私有仅仅是封装的一种表现形式。


(2)继承

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继那个类即可。子类可以直接访问父类中的非私有的属性和行为。

通过extends 关键字让类与类之间产生继承关系。

通过 extends 关键字让类与类之间产生继承关系。

class Person     //父类,抽取出子类老师学生类的共性加以描述
{
String name; //姓名
int age; //年龄
Person(String name){
this.name = name;
}
void eat(){
System.out.println("我要吃");
}
}

class Student extends Person
{
int sid //学生独有的属性,学号
//学生独有的方法,学习
void study(){
System.out.println("我要学习");
}
}

class Teacher extends Person
{
int tid //学生独有的属性,教师号
//学生独有的方法,讲课
void teach(){
System.out.println("我要讲课");
}
}

继承的特点

Java只支持单继承,不支持多继承。

Java支持多层继承关系。

Class Fu{}

Class Zi extends Fu{}

Class Sun extends Zi{}

定义继承需要注意:

不要仅为了获取其他类中某个功能而去继承

类与类之间要有所属(" is a " )关系,xx1是xx2的一种。

 

Super及this关键字

Super的使用和this的使用基本相同,只是表示的对象层次不同。

This表示所在函数对象的引用。

Super表示父类对象的引用。

class Fu
{
int i;
}
class Zi extends Fu
{
int i;
//第一个i为子类的i,第二个i为父类的i
System.out.println(this.i+" "+super.i);
}


方法重写

当子类中出现与父类各项参数相同的方法时,调用方法时将运行子类的方法,这就是方法的重写。

class Fu
{
void say(){
System.out.println("我是父亲。。");
}
}
class Zi extends Fu
{
//子类覆盖了父类的say方法
void say(){
System.out.println("我是儿子。。");
}
}

注:子类方法的权限必须大于或等于父类方法的权限,静态只能覆盖静态。



----------- android培训java培训java学习型技术博客、期待与您交流! ------------