----------- 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学习型技术博客、期待与您交流! ------------