java面向对象(一)面向对象及其三大特性

一、面向对象主要概念

面向对象是一种组件化的编程思想

1.类:所有有共性的一类实体的统称,是一个模板
2.对象:是某个实际存在的实体实例

二、面向对象编程的组成部分

1.面向对象编程的组成部分
  • 属性:描述实体的指标,是静态的
  • 方法:对实体进行的一些操作和实例拥有的行为,是动态的

面向对象编程的组成部分

2.类的定义

类的定义

类定义包括以下几个部分

  • (1)包的定义:类似于定义类的所在的位置(存储位置)
  • (2)类的主体定义
    • (1) 静态变量(类变量)
    • (2) 成员变量(域,属性)
    • (3) 实例化方法(特殊的方法,方法名与类名相同,且不声明返回值)
    • (4) 静态方法(类方法)
    • (5) 方法
3.类内部的属性和方法的操作
  • 类变量和类方法通过类可以直接操作
    • 通过类名.静态变量类名.静态方法()来调用
  • 对象的属性和方法通过对象来操作,对象必须要先实例化
    • 通过对象.属性对象.方法()来调用
  1. Company.getType(); //通过类调用类方法
  2. Company c = new Company();
  3. c.setName("科技公司");

三、面向对象的三大特性

1.封装性

所谓封装性,即类的内部成员和部分方法对外是不可见的,外部无法直接修改类内部的一些属性

  1. class Company {
  2. private static String type = "BUSINESS";
  3. private String name;
  4. public Company(String name) {
  5. this.name = name;
  6. }
  7. public void setName(String name) {
  8. this.name = name;
  9. }
  10. public String getName() {
  11. return this.name;
  12. }
  13. public static String getType() {
  14. return type;
  15. }
  16. }
  17. public class Demo{
  18. public static void main(String[] args) {
  19. Company c = new Company("");
  20. c.setName("XX科技有限公司");
  21. System.out.println(c.getName());
  22. }
  23. }
  • 外部实例化的对象,无法通过对象.name来修改name的值
  • 外部实例对象,可以通过提供的对外方法来操作属性
2.继承性

继承性是为了解决代码复用的问题,一个类如果继承了另外一个类,那么它就拥有它所继承的那个类所有的属性和方法,这是人继承很类似

(1)父类

被继承的类称为父类

(2)子类

继承后的类称为子类

子类拥有的属性和方法

注:覆盖父类方法是会覆盖父类同名,而且参数相同的方法

  1. package main.java.com.shixinke.java.demo.basic.oop;
  2. class Company {
  3. private static String type = "BUSINESS";
  4. private String name;
  5. public Company() {
  6. }
  7. public Company(String name) {
  8. this.name = name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public String getName() {
  14. return this.name;
  15. }
  16. public static String getType() {
  17. return type;
  18. }
  19. public void introduction() {
  20. System.out.println("公司名称为:"+this.name);
  21. }
  22. }
  23. class TechCompany extends Company {
  24. private String techNo;
  25. public void setTechNo(String no) {
  26. this.techNo = no;
  27. }
  28. public String getTechNo() {
  29. return this.techNo;
  30. }
  31. public void introduction() {
  32. System.out.println("公司名称为:"+this.getName()+";技术编号:"+this.techNo);
  33. }
  34. }
  35. public class Demo{
  36. public static void main(String[] args) {
  37. TechCompany t = new TechCompany();
  38. t.setName("XX科技有限公司");
  39. t.setTechNo("T1001");
  40. t.introduction();
  41. }
  42. }
  • 它拥有父类的name属性和setName方法和getName方法
  • 它拥有自己的techNo属性和getTechNo方法
  • 它覆盖了父类的introduction方法
3.多态性
  • 方法的多态性:重载与覆写
    • 重载:同一个方法名称,根据不同的参数类型或个数完成不同的功能(同一个类中可存在多个同名方法)
    • 覆写:同一个方法,根据实例化的子类对象不同,完成不同的功能
  • 对象的多态性:父子类对象的转换
    • 向上转型:子类对象转化为父类对象,格式为:父类名称 父类对象 = 子类实例;
    • 向下转型:父类对象转化为子类对象,格式为:子类名称 子类对象 = (子类名称) 父类实例;
  1. package main.java.com.shixinke.java.demo.basic.oop;
  2. class Company {
  3. private static String type = "BUSINESS";
  4. private String name;
  5. public Company() {
  6. }
  7. public Company(String name) {
  8. this.name = name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public String getName() {
  14. return this.name;
  15. }
  16. public static String getType() {
  17. return type;
  18. }
  19. public void introduction() {
  20. System.out.println("公司名称为:"+this.name);
  21. }
  22. }
  23. class TechCompany extends Company {
  24. private String techNo;
  25. public TechCompany() {
  26. }
  27. public TechCompany(String name) {
  28. this.setName(name);
  29. }
  30. public TechCompany(String name, String no) {
  31. this.setName(name);
  32. this.techNo = no;
  33. }
  34. public void say() {
  35. System.out.println("无内容的介绍");
  36. }
  37. public void say(String word) {
  38. System.out.println("有内容的介绍:"+word);
  39. }
  40. public void setTechNo(String no) {
  41. this.techNo = no;
  42. }
  43. public String getTechNo() {
  44. return this.techNo;
  45. }
  46. public void introduction() {
  47. System.out.println("公司名称为:"+this.getName()+";技术编号:"+this.techNo);
  48. }
  49. }
  50. public class Demo{
  51. public static void main(String[] args) {
  52. //调用实例化方法(也属于同名方法)
  53. TechCompany t1 = new TechCompany();
  54. TechCompany t2 = new TechCompany("XX科技");
  55. //调用同名方法say
  56. t2.say();
  57. t2.say("test");
  58. }
  59. }