Java-面向对象(继承,封装)
一,什么是面向对象:
对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
1,类的概念:
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
2,对象的概念:
Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
对象具有属性和行为。
对象具有变化的状态。
对象具有唯一性。
对象都是某个类别的实例。
一切皆为对象,真实世界中的所有事物都可以视为对象。类是对象的抽象,对象是类的具体。
二,面向对象的三大特征:
封装:把属性私有化,实现了对外界的隐藏,然后通过共有的getter和setter方法对属性进行获取和赋值,保证了操作的安全性,一般属性私有化(private),方法公有化(public),除非方法只是用来内部调用,可以用private修饰。
1,对属性使用private私有化进行修饰,实现了对外界的隐藏,外界不能够直接操作类的属性。
2,定义针对属性的getter和setter方法,完成对属性的获取和设置值,在发放可以完成完全验证。
public方法是共有的,可以直接访问。
/**
* @author 高影 2022/11/12 22:02
* @version 1.0
*/
public class Student {
public String name;
public int age;
public String address;
}
/**
* @author 高影 2022/11/12 22:03
* @version 1.0
*/
public class Test01 {
public static void main(String[] args) {
Student student = new Student();
student.name = "小美";
student.age = 18;
student.address = "海南";
System.out.println("姓名:"+student.name+" 年龄:"+student.age+" 地址:"+student.address);
}
}
运行结果如下:
如果使用private方法,不能直接被外部访问,需要用getter和setter方法。
/**
* @author 高影 2022/11/12 22:02
* @version 1.0
*/
public class Student {
//属性
private String name;
private int age;
private String address;
//方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
public void show(){System.out.println("姓名:"+name+" 年龄;"+age+" 地址:"+address);}
}
/**
* @author 高影 2022/11/12 22:03
* @version 1.0
*/
public class Test01 {
public static void main(String[] args) {
Student student = new Student();
student.setName("小明");
student.setAge(18);
student.setAddress("海南");
student.show();
}
}
继承:把几个类中相同的属性和方法抽离出来定义在基类中,子类不在需要定义这些属性和方法,继承之后,就相当于拥有了这些属性和方法。
1,子类继承父类,父类定义的公共属性和方法子类会拥有,但是父类定义的私有化的属性和方法,子类不能继承。
/**
* @author 高影 2022/11/13 9:55
* @version 1.0 父类
*/
public class Person {
String name;
int age;
String address;
public void eat(){
System.out.println("吃饭");
}
public void study(){
System.out.println("学习");
}
public void sleep(){
System.out.println("睡觉");
}
}
父类公共的属性,子类可以直接继承。
/**
* @author 高影 2022/11/12 22:02
* @version 1.0 子类继承父类
*/
public class Student extends Person{
String stuId;
public void play(){
System.out.println("学生在娱乐");
}
}
/**
* @author 高影 2022/11/12 22:02
* @version 1.0 子类继承
*/
public class Teacher extends Person{
String teacherNo;
public void work(){
System.out.println("老师在工作");
}
}
2,父类继承过来的方法,子类可以进行改造,重新实现功能(方法的重写)调用的时候执行的是子类新实现的方法。
/**
* @author 高影 2022/11/13 9:55
* @version 1.0
*/
public class Person {
String name;
int age;
String address;
public void eat(){
System.out.println("吃饭");
}
public void study(){
System.out.println("学习");
}
public void sleep(){
System.out.println("睡觉");
}
}
/**
* @author 高影 2022/11/12 22:02
* @version 1.0
*/
public class Teacher extends Person{
String teacherNo;
public void work(){
System.out.println("老师在工作");
}
public void study(){
System.out.println("老师在办公室学习");
}
}
/**
* @author 高影 2022/11/12 22:03
* @version 1.0
*/
public class Test01 {
public static void main(String[] args) {
Student stu = new Student();
stu.study();
System.out.println("------------------");
Teacher tec = new Teacher();
tec.study();
}
}
执行结果是子类重新定义的老师在办公室里学习。
m0_69600107: 求源码
weixin_70672436: 加油加油
weixin_70672436:
羊咩咩的小脑袋~:
weixin_70672436: