java面向对象精华总结
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
法进行属性访问。
员工类:name id pay
经理类:继承了员工,并有自己特有的bonus。
*/
class Employee
{
private String name;
private String id;
private double salary;
Employee(String name,String id,double salary)
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量
简单说:查阅父类功能,创建子类对象使用功能。
如果子类中出现非私有的同名成员变量,,子类要访问本类中的变量,用this,要访问父类中的同名变量,用super,this代表本类对象的引用,super代表父类对象的引用。
子父类函数的特点:
重写(覆盖)(子父类方法要一模一样):要与重载(只看同名函数的参数列表)区别开来,当子类出现和父类一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。
覆盖注意:子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败;静态只能覆盖静态;
子父类的构造函数:
在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句super();
super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
{
return name;
}
private Student(){}
public static Student s=new Student();//先初始化对象,称为:饿汉式类一进内存,就创建对象,设计建议饿汉式
public static Student getInstance()
{
return s;
return s;
}
}
*/
面向对象总结2
继承(extends):
1、提高了代码的复用性
2、让类与类之间产生了关系,有了这个关系,才有了多态的特性
注意:千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有所属关系才可以继承,所属关系:is a。
Java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患:当多个父类(超类,基类super)中定义了相同功能,功能的内容不同时,子类对象不知该运行哪一个。
因为子类每一个构造函数内的第一行都有一句隐式super();
final关键字:可以修饰类、方法、变量,修饰的类不可以被继承,修饰的方法不可以被覆盖,修饰的变量时一个常量,只能被赋值一次,内部类只能访问被final修饰的局部变量。
抽象类的特点:抽象方法一定定义在抽象类中,抽象方法和抽象类都必须被abstract关键字修饰,抽象类不可以用new创建对象,因为调用抽象方法没意义;
接口(interface):初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
接口是对外暴露的规则,是程序的功能扩展,可以用来多实现
1、接口中常见定义:常量、抽象方法
2、接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
但是java保留这种机制,并用多实现形式完成表示。
Java支持多层继承,也就是一个继承体系。
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能,通过了解共性功能,就可以知道该体系的基本功能。
在具体调用时,要创建最子类的对象,一是有可能父类不能创建对象(抽象类和接口),二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。
Java面向对象精华总结
面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。
面试官若问什么是面向对象(开放式问题,回答必须有自己的体会):
1、面向对象是一种思想,可以使复杂的问题简单化,可以使我们从执行者变成指挥者
2、结合实际场景举个例子说明:面试官就是在用面向对象的思想思考问题,公司里面现在有招人的需求,说明公司现在的业务量比较大,代表着公司在蓬勃发展,你需要找一些具有专业编程经验的人来帮你完成公司的工作,我就是那个对象,我具备专业编程的功能,你就是在指挥我做事情,就是使用我的功能,来为公司创造效益。【万物皆对象】
{
this.name=name;
this.id=id;this.bonus=bonus;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manager(String name,String id,double salary,double bonus)
{
super(name,id,salary);
}
public void work()
{
System.out.println("Worker work");
}
}
模板方法模式:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
面向对象三大特征:封装、继承、多态
类和对象的关系:
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同称为类的成员(成员变量和成员方法)
成员变量作用于整个类中,局部变量作用于函数中,或者语句中
成员变量在堆内存中,因为对象的存在,才在内存中存在,局部变量:存在栈内存中
对于事物该怎么描述就怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
方法被调用只有两种方式:对象调用和类名调用(static)
Eg:class SimpleDemo//单例设计模式
{
public static void main(String[] args)
{
Student s1=Student.getInstance();
设计模式:解决某一类问题最行之有效的方法,java中有23中设计模式
单例设计模式:解决一个类在内存只存在一个对象
1、避免其他程序过多建立该类对象,禁止其他程序建立该类对象(将构造函数私有化)
2、为了让其他程序可以访问到该类对象,在本类中,自定义一个对象(在类中创建一个本类对象)
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式(提供一个方法可以获取到该对象)
private int age;
public void setΒιβλιοθήκη Baiduge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
}
}
class GetMax
{
publicstaticint getMax(int[] arr)
{
int max=0;
for(int x=0;x<arr.length;x++)
{
if(arr[x]>arr[max])
max=x;
}
return arr[max];
}
}
构造代码块(定义对象共性初始化内容):给对象进行初始化,对象一建立,就运行,而且优先于构造函数执行。
静态代码块(可以验证类是否加载):
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而加载,只执行一次,并优先于主函数,一般用于类的初始化。
Person p = new Person("zhangsan",20);
该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
}
}
/*class Student
{
private static Student s=null;//懒汉式,延迟加载,调用getInstance方法时,才建立对象
private Student(){}
public static Student getInstance()
{
if(s==null)
s=new Studente();
Student s2=Student.getInstance();
s1.setAge(20);
s1.setName("HuangQin");
System.out.println(s2.getAge()+";"+s2.getName());
}
}
class Student
{
private String name;
记住:接口中的成员都是public的,接口是不可以创建对象的,因为有抽象方法,需要被子类实现(implements),子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。
[类与类之间继承,类与接口之间实现,接口与接口之间继承]
Eg:获取数组的最大值
class ArrayTool
{
public static void main(String[] args)
{
int[] arr={5,8,4,1,3,5,8,77,55,99};
int max=GetMax.getMax(arr);
System.out.println("max="+max);
{
super(name,id,salary);
this.bonus=bonus;
}
public void work()
{
System.out.println("Manager work");
}
}
class Worker extends Employee
{
Worker(String name,String id,double pay)
抽象类比一般类多了抽象函数,在类中可以定义抽象方法,不可以实例化。
抽象类可以不定义抽象方法,仅仅是不让该类建立对象。
抽象类Eg:
/*
假如我们在开发一个系统时需要对员工进行建模,员工包含3个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
构造代码块是给所有对象进行统一初始化,而构造函数是给对应对象进行初始化。
this关键字:代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表那个对象。
构造函数间调用只能用this语句,this语句只能放在构造函数第一行,因为初始化动作要先执行,构造函数的权限和类的权限一致。
抽象类中的抽象方法要被使用,必须由子类覆写所有的抽象方法,建立子类对象调用,如果子类只覆写了部分抽象方法,那么该子类还是一个抽象类。
抽象类和一般类没有太大的不同,只是要注意该怎样描述事物就如何描述事物,只不过该事物中出现了一些看不懂的东西,这些不确定的功能,也是该事物的功能,需要明确出现,但是无法定义主体。
封装(Encapsulation):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:将变化隔离、便于使用、提高重用性、提高安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问
private(私有):权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效。
static用于修饰成员(成员变量和成员函数)
被修饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类名调用。类名.静态成员【方法区、共享区、数据区】----存放类中的方法和共享数据。
什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的,用类名直接调用。
为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,所以子类在对象初始化时,要先访问一下父类的构造函数,俄国要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
子类的所有构造函数,默认都会访问父类中空参数的构造函数
员工类:name id pay
经理类:继承了员工,并有自己特有的bonus。
*/
class Employee
{
private String name;
private String id;
private double salary;
Employee(String name,String id,double salary)
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量
简单说:查阅父类功能,创建子类对象使用功能。
如果子类中出现非私有的同名成员变量,,子类要访问本类中的变量,用this,要访问父类中的同名变量,用super,this代表本类对象的引用,super代表父类对象的引用。
子父类函数的特点:
重写(覆盖)(子父类方法要一模一样):要与重载(只看同名函数的参数列表)区别开来,当子类出现和父类一样的函数时,当子类对象调用该函数,会运行子类函数的内容,如同父类的函数被覆盖一样。
覆盖注意:子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败;静态只能覆盖静态;
子父类的构造函数:
在对子类对象进行初始化时,父类的构造函数也会运行
那是因为子类的构造函数默认第一行有一条隐式的语句super();
super():会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super();
{
return name;
}
private Student(){}
public static Student s=new Student();//先初始化对象,称为:饿汉式类一进内存,就创建对象,设计建议饿汉式
public static Student getInstance()
{
return s;
return s;
}
}
*/
面向对象总结2
继承(extends):
1、提高了代码的复用性
2、让类与类之间产生了关系,有了这个关系,才有了多态的特性
注意:千万不要为了获取其他类的功能,简化代码而继承,必须是类与类之间有所属关系才可以继承,所属关系:is a。
Java语言中,只支持单继承,不支持多继承,因为多继承容易带来安全隐患:当多个父类(超类,基类super)中定义了相同功能,功能的内容不同时,子类对象不知该运行哪一个。
因为子类每一个构造函数内的第一行都有一句隐式super();
final关键字:可以修饰类、方法、变量,修饰的类不可以被继承,修饰的方法不可以被覆盖,修饰的变量时一个常量,只能被赋值一次,内部类只能访问被final修饰的局部变量。
抽象类的特点:抽象方法一定定义在抽象类中,抽象方法和抽象类都必须被abstract关键字修饰,抽象类不可以用new创建对象,因为调用抽象方法没意义;
接口(interface):初期理解,可以认为是一个特殊的抽象类,当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
接口是对外暴露的规则,是程序的功能扩展,可以用来多实现
1、接口中常见定义:常量、抽象方法
2、接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
但是java保留这种机制,并用多实现形式完成表示。
Java支持多层继承,也就是一个继承体系。
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能,通过了解共性功能,就可以知道该体系的基本功能。
在具体调用时,要创建最子类的对象,一是有可能父类不能创建对象(抽象类和接口),二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。
Java面向对象精华总结
面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。
面试官若问什么是面向对象(开放式问题,回答必须有自己的体会):
1、面向对象是一种思想,可以使复杂的问题简单化,可以使我们从执行者变成指挥者
2、结合实际场景举个例子说明:面试官就是在用面向对象的思想思考问题,公司里面现在有招人的需求,说明公司现在的业务量比较大,代表着公司在蓬勃发展,你需要找一些具有专业编程经验的人来帮你完成公司的工作,我就是那个对象,我具备专业编程的功能,你就是在指挥我做事情,就是使用我的功能,来为公司创造效益。【万物皆对象】
{
this.name=name;
this.id=id;this.bonus=bonus;
}
public abstract void work();
}
class Manager extends Employee
{
private double bonus;
Manager(String name,String id,double salary,double bonus)
{
super(name,id,salary);
}
public void work()
{
System.out.println("Worker work");
}
}
模板方法模式:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
面向对象三大特征:封装、继承、多态
类和对象的关系:
类:对现实生活中事物的描述
对象:就是这类事物,实实在在存在个体
描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同称为类的成员(成员变量和成员方法)
成员变量作用于整个类中,局部变量作用于函数中,或者语句中
成员变量在堆内存中,因为对象的存在,才在内存中存在,局部变量:存在栈内存中
对于事物该怎么描述就怎么描述,当需要将该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
方法被调用只有两种方式:对象调用和类名调用(static)
Eg:class SimpleDemo//单例设计模式
{
public static void main(String[] args)
{
Student s1=Student.getInstance();
设计模式:解决某一类问题最行之有效的方法,java中有23中设计模式
单例设计模式:解决一个类在内存只存在一个对象
1、避免其他程序过多建立该类对象,禁止其他程序建立该类对象(将构造函数私有化)
2、为了让其他程序可以访问到该类对象,在本类中,自定义一个对象(在类中创建一个本类对象)
3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式(提供一个方法可以获取到该对象)
private int age;
public void setΒιβλιοθήκη Baiduge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
}
}
class GetMax
{
publicstaticint getMax(int[] arr)
{
int max=0;
for(int x=0;x<arr.length;x++)
{
if(arr[x]>arr[max])
max=x;
}
return arr[max];
}
}
构造代码块(定义对象共性初始化内容):给对象进行初始化,对象一建立,就运行,而且优先于构造函数执行。
静态代码块(可以验证类是否加载):
格式:
static
{
静态代码块中的执行语句。
}
特点:随着类的加载而加载,只执行一次,并优先于主函数,一般用于类的初始化。
Person p = new Person("zhangsan",20);
该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
}
}
/*class Student
{
private static Student s=null;//懒汉式,延迟加载,调用getInstance方法时,才建立对象
private Student(){}
public static Student getInstance()
{
if(s==null)
s=new Studente();
Student s2=Student.getInstance();
s1.setAge(20);
s1.setName("HuangQin");
System.out.println(s2.getAge()+";"+s2.getName());
}
}
class Student
{
private String name;
记住:接口中的成员都是public的,接口是不可以创建对象的,因为有抽象方法,需要被子类实现(implements),子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。
[类与类之间继承,类与接口之间实现,接口与接口之间继承]
Eg:获取数组的最大值
class ArrayTool
{
public static void main(String[] args)
{
int[] arr={5,8,4,1,3,5,8,77,55,99};
int max=GetMax.getMax(arr);
System.out.println("max="+max);
{
super(name,id,salary);
this.bonus=bonus;
}
public void work()
{
System.out.println("Manager work");
}
}
class Worker extends Employee
{
Worker(String name,String id,double pay)
抽象类比一般类多了抽象函数,在类中可以定义抽象方法,不可以实例化。
抽象类可以不定义抽象方法,仅仅是不让该类建立对象。
抽象类Eg:
/*
假如我们在开发一个系统时需要对员工进行建模,员工包含3个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
构造代码块是给所有对象进行统一初始化,而构造函数是给对应对象进行初始化。
this关键字:代表它所在函数所属对象的引用。
简单说:哪个对象在调用this所在的函数,this就代表那个对象。
构造函数间调用只能用this语句,this语句只能放在构造函数第一行,因为初始化动作要先执行,构造函数的权限和类的权限一致。
抽象类中的抽象方法要被使用,必须由子类覆写所有的抽象方法,建立子类对象调用,如果子类只覆写了部分抽象方法,那么该子类还是一个抽象类。
抽象类和一般类没有太大的不同,只是要注意该怎样描述事物就如何描述事物,只不过该事物中出现了一些看不懂的东西,这些不确定的功能,也是该事物的功能,需要明确出现,但是无法定义主体。
封装(Encapsulation):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
好处:将变化隔离、便于使用、提高重用性、提高安全性
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问
private(私有):权限修饰符,用于修饰类中的成员(成员变量,成员函数),私有只在本类中有效。
static用于修饰成员(成员变量和成员函数)
被修饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类名调用。类名.静态成员【方法区、共享区、数据区】----存放类中的方法和共享数据。
什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的,用类名直接调用。
为什么子类一定要访问父类中的构造函数:
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的,所以子类在对象初始化时,要先访问一下父类的构造函数,俄国要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
子类的所有构造函数,默认都会访问父类中空参数的构造函数