面向对象编程-零基础学习3

如果以上两篇文章同学你已经跟练过了,接下来你就可以来了解我们面向对象的四个基本特征了,概念其实很简单,我会以最简单的方式告诉你,重点是如何将这些重要的概念融会贯通到你的代码中,用代码体现出来你学习成果;首先别着急,一点一滴的做事情,不积跬步无以至千里,不积小流无以成江河,学习也是一样,积少成多的过程。

接下来我们来聊聊面向对象4大特种中几个:

  1. 什么是封装?
    1. 封装,就是隐藏实现细节。
  2. 封装的举例:
    1. 类对于属性和方法的封装。
    2. 对象对于数据的封装。
    3. 方法对于代码的封装。
    4. 对于属性的封装。
  3. 如何对于属性封装?
    1. 将属性私有化,提供公有方法访问私有属性。
  4. 老师类的属性封装:
    1. public class Teacher {
      	private String name; // 教员姓名
      	private int age; // 年龄
      	/**
      	 * 返回自我介绍的内容
      	 */
      	public String introduction() {
      		return "大家好!我是" + name + ",我今年" + age + "岁";
      	}	
      	public void setName(String name){
      		this.name = name;
      	}	
      	public String getName(){
      		return name;
      	}	
      	public void setAge(int age){
      		if(age>=22&&age<=150){
      			this.age = age;			
      		}else{
      			System.out.println("年龄不合法,恢复到初始状态");
      			this.age = 22;
      		}
      	}	
      	public int getAge(){
      		return age;
      	}
      }
  5. 老师类的测试类

    1. public class TeacherTest {
      	public static void main(String[] args) {
      		Teacher t1 = new Teacher();//创建老师对象
      		//t1.name = "张老师";
      		//t1.age = -10;
      		t1.setName("张老师");
      		t1.setAge(1000);
      		
      		String s = t1.introduction();
      		System.out.println(s);
      		
      		System.out.println(t1.getName());
      		System.out.println(t1.getAge());
      	}
      }

       

  6. 为什么使用构造方法:
    1. 要简化对象初始化的代码,可以通过构造方法来解决。
    2. 检查属性的赋值,将代码的安全性得到提高。
  7. 构造方法的作用,对象的初始化操作。
  8. 升级教师类,增加构造方法。
    1. public class Teacher {
      	private String name; // 教员姓名
      	private int age; // 年龄
      	private String edu;// 学历
      	private String position;// 职位
      	//缺省的
      	public Teacher(){
      		
      	}
      	public Teacher(String name,int age,String edu,String position){
      		this.name = name;
      		this.age = age;
      		this.edu = edu;
      		this.position = position;
      	}
      	/**
      	 * 返回自我介绍的内容
      	 */
      	public String introduction() {
      		return "大家好!我是" + name + ",我今年" + age + "岁,学历是" + edu + ",职位是" + position;
      	}
      	//属性的:get 和 set 方法已经被省略
      }

       

  9. 测试老师,使用构造方法

    1. public class TeacherTest {
      	public static void main(String[] args) {
      		Teacher t1 = new Teacher("张老师", 33, "硕士", "讲师");
      		String s = t1.introduction();
      		System.out.println(s);
      		
      		System.out.println(t1.getName());
      		System.out.println(t1.getAge());
      		
      	}
      }

       

  10. 构造方法必须满足以下语法规则:
    1. 方法名与类名相同
    2. 没有返回类型
  11. 方法重载:
    1. 方法名称相同,形参列表不同。
    2. 典型案例:
      • println方法
      • Math.abs方法(求绝对值)
    3. 构造方法重载
  12. 方法重载是多态特性的重要体现
    1. 代码运行时根据参数的不同会选择不同的方法。
  13. 普通方法名称可以与类名相同,但是不规范
    1. 普通方法名要准守驼峰命名法,例如:setName(String name);
  14. 构造方法普通方法的区别
    1. 构造方法没有返回值类型。
    2. 构造方法名称必须和类名相同。
    3. 构造方法是实例化对象时使用。(构造方法在创建该类的对象时候使用)
  15. 注意:
    1. 一个类中,默认缺省状态有一个无参的构造方法。
    2. 一旦人为定义一个有参的构造方法时候,缺省构造方法则消失。
  16. 面向对象的四大特性
    1. 封装
    2. 继承
    3. 多态
    4. 抽象
  17. 在Java程序中,代码封装带给我们的好处是什么?
    1. 代码封装的方法可以重复使用。
    2. 隐藏实现细节。
    3. 提高数据的安全性。
  18. 继承关系设计
    1. 符合一个原则:什么是什么的一种。
    2. 父类更加通用,子类更加具体。
  19. 继承:
    1. 概念:子类具有父类的一般特性(包括属性和行为),以及自身特殊的特性。
  20. 继承的好处
    1. 子类自动继承父类的属性和方法,子类中不再存在重复代码。
  21. 关键字super,表示的是:父类 或者是 基类。
  22. 关键字  this,表示的是:当前类的引用。
  23. 关键字extends,表示一个类继承了另一个类。
  24. 继承的特点
    1. 子类自动继承父类的属性和方法,子类中可以定义特定的属性和方法。
  25. 创建老师类

    1. public class Teacher {
      	private String name;
      	private String school;
      	public Teacher() {
      	}
      	public Teacher(String name, String school) {
      		this.name = name;
      		this.school = school;
      	}
      	public void giveLession() {
      		System.out.println("知识点讲解");
      		System.out.println("总结提问");
      	}
      	public void introduction() {
      		System.out.println("我是来自" + this.school + "的" + name);
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public String getSchool() {
      		return school;
      	}
      	public void setSchool(String school) {
      		this.school = school;
      	}
      }
  26. 创建JavaTeacher类

    1. public class JavaTeacher extends Teacher {
      	public JavaTeacher(String name,String school){
      		super(name, school);
      	}
      	/* 
      	 * 方法重写,自类重写父类的方法
      	 */
      	@Override
      	public void giveLession() {
      		System.out.println("打开Eclipse,讲授JavaSE");
      		super.giveLession();
      	}
      	
      }

       

  27. 创建DoNet老师类

    1. public class DoNetTeacher extends Teacher {
      
      	public DoNetTeacher() {
      		super();
      	}
      	public DoNetTeacher(String name, String school) {
      		super(name, school);
      	}
      	@Override
      	public void giveLession() {
      		System.out.println("打开VS2019");
      		super.giveLession();
      	}
      }

       

  28. 创建测试类

    1. public class TeacherTest {
      
      	public static void main(String[] args) {
      		JavaTeacher t1 = new JavaTeacher("Lisa", "HK");
      		t1.introduction();
      		t1.giveLession();
      		DoNetTeacher t2 = new DoNetTeacher("Tom", "BJ");
      		t2.introduction();
      		t2.giveLession();
      	}
      }

       

  29. Object:一切类的根父类
    1. 一切类直接过着间接都继承了Object类
  30. 方法重写
    1. 子类继承父类,重写父类的方法要求:
      • 方法名称相同,返回值类型相同,形参列表相同。
      • 访问修饰符不能小于父类的访问修饰符范围。、
    2. 方法重写的典型案例:
      • Object的toString()方法;
        1. 返回该对象的字符串表示形式。
        2. 默认返回该对象的内存地址。
  31. 多态
    1. 概念:多态是具有表现多种形态的能力的特征,
    2. 同一个实现接口,使用不同的实例而执行不同操作。
    3. 多态性是OOP的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定,而非在编辑期间就决定了。这对于大型系统来说能提高系统的灵活和扩展性。
  32. 多态形成的条件:
    1. 要有继承关系;
    2. 要有方法重写;
    3. 父类引用指向子类对象。
  33. 多态的体现形式:
    1. 方法重载是多态特性的重要体现
      • 代码运行时根据参数的不同会选择不同的方法。
    2. 方法的形参处定义的是父类的类型,实际传入的是具体子类的对象。
  34. 多态的优点
    1. 提高了代码的灵活性和可扩展性。
    2. 优点的案例:
      • 使用多态之后,当需要增加新的子类类型时,无需更改总部类,程序的可扩展性及可维护性增强。
  35. 构造器的相关知识点:
    1. 继承关系,子类创建对象时候。
    2. 会默认的先执行父类的构造器。
    3. 如果没有明确指出,就会执行父类无参的缺省构造器。
  36. 普通方法调用
    1. 子类重写了父类的方法,就会替换父类的方法。
    2. 如果需要调用父类的方法,需要使用关键字:super。

未完待续,下一篇文章见。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章