java面向对象

java面向对象的三大特性:封装、继承、多态


类和对象的关系:

类是对象的抽象描述,类名并包括属性和方法两个主要部分

一、封装

例:

 1 package Zsh.SuiSui03;
 2 
 3 class FengZhuangDemoss{
 4 public static void main(String[] args){
 5     Parson p = new Parson();
 6     p.setAge(-10);
 7     System.out.println(p.age);
 8 
 9     p.setAge(-10);
10     System.out.println(p.age);
11     p.setName("张三");
12     System.out.println(p.getName());
13 
14     // Student student = new Student();
15     // p.say(Student);//匿名对象
16     // p.say(Student);//与上一行相同
17 
18 
19     p.say(new Student());//匿名对象,只能用一次,如果需要再次使用要再次new一个对象
20     p.say(new Student());
21     }
22 }
23 
24 class Parson {
25     int age;
26     private String name;//封装
27 
28     public void setAge (int a){
29         if(a<0){//传入的参数不符合常理
30             a = 20;
31         }else{
32             age = a;
33         }
34     }
35 
36     public void setName(String str){
37         this.name = str;
38     }
39     public  String getName(){
40         return name;
41     }
42 //    public void setName(String name){
43 //        this.name = name;
44 //    }
45     public void speak(){
46         System.out.println(name + age + "讲话!!!");
47     }
48     public void say(Student student){
49         System.out.println("学生类");
50     }
51     public void testThis(){
52         System.out.println(this);
53     }
54 }

 二、构造器

构造方法——构造器(Constructor)
 
构造方法:
  1. 方法名字和类名一样,不允许修改,不需要写return
  2. 没有返回值类型,void不能写
  3. 方法的重载 :方法名一样,入参不一样,返回值类型不一样。代码的复用性高
  4. 运行:只要new对象,就运行,不允许手动调用,在new对象时,只运行一次
  5. 作用:建立对象的同时,给对象初始化
  6. 默认构造方法:类名一样,没有参数的构造方法,如果手动写了,编译的时候就不会添加默认方法
 

//无参构造方法:

People p = new People();
 

//有参构造方法:

People p = new People(10);
 
编写方法:
class People{
People(){
//无参构造方法()没有参数
 
}
People(int age){
//有参构造方法(int age)有参数
}
}
 
例:
  1 package Zsh.SuiSui03;
  2 /*
  3     构造方法
  4  */
  5 
  6 public class ConstructorDemoss {
  7     public static void main(String[] args){
  8 //    Sumss s = new Sumss(10,20);
  9 //    int sum = s.getSum();
 10 //    System.out.println(sum);
 11 
 12     Rectangle re = new Rectangle(5,8);
 13     int length = re.getlength();
 14     int square = re.getsquare();
 15     System.out.println("长方形的周长="+length);
 16     System.out.println("长方形的面积="+square);
 17     }
 18 }
 19     /*
 20         构造方法——构造器(Constructor)
 21 
 22         构造方法:
 23             1.方法名字和类名一样,不允许修改,不需要写return
 24             2.没有返回值类型,void不能写
 25             3.方法的重载 :方法名一样,入参不一样,返回值类型不一样。代码的复用性高
 26             4.运行:只要new对象,就运行,不允许手动调用,在new对象时,只运行一次
 27             5.作用:建立对象的同时,给对象初始化
 28             6.默认构造方法:类名一样,没有参数的构造方法,如果手动写了,编译的时候就不会添加默认方法
 29 
 30                 //无参构造方法:
 31                     People p = new People();
 32                 //有参构造方法:
 33                 People p = new People(10);
 34      */
 35     /*
 36         编写方法:
 37         class People{
 38                     People(){
 39                     //无参构造方法()没有参数
 40 
 41                     }
 42                     People(int age){
 43                 //有参构造方法(int age)有参数
 44                 }
 45                 }
 46      */
 47     class People{
 48         String name;
 49         int age;
 50         People (){
 51             this("岁岁",20);
 52         }
 53         People(String name,int age){
 54             this.name = name;
 55             this.age = age;
 56         }
 57 
 58         public void setName(String name) {
 59             this.name = name;
 60         }
 61 
 62         public void setAge(int age) {
 63             this.age = age;
 64         }
 65 
 66         public String getName() {
 67             return name;
 68         }
 69 
 70         public int getAge() {
 71             return age;
 72         }
 73     }
 74 
 75     class Sumss {
 76         //定义一个类sum,其中定义一个求两个数据和的方法(用构造方法)
 77         private int a;
 78         private int b;
 79         Sumss (int a, int b){//初始化
 80             this.a = a;
 81             this.b = b;
 82         }
 83         public int getSum(){
 84             return a+b;
 85         }
 86     }
 87 
 88     class Rectangle {
 89         //定义长方形类,提供两个方法,计算面积周长
 90         private int width;
 91         private int height;
 92 
 93         Rectangle(int x,int y){
 94             this.width = x;
 95             //定义一个宽
 96             this.height = y;
 97             //定义一个长
 98         }
 99         public int getlength(){
100             return 2*(this.height+this.width);
101         }
102         public int getsquare(){
103             return this.height*this.width;
104         }
105     }

 


 

 

三、继承:

1.继承的由来

要求:定义学生类(姓名,年龄,学习方法)

定义老师类(姓名,年龄,上课方法)

定义工人类(姓名,年龄,上班方法)

发现三个类中,出现了重复的内容,年龄和姓名

避免重复性,共性抽取出来,放在单独的一个类中,三个类都可以直接使用

让这些类产生关系,继承关系

 

继承:类和类之间的关系

新的关键字 extends (扩展,延伸)

 

格式: class A类 extends B类

A类继承B类

 

Student类,称为Person类的子类

Person类,称为Student类的父类,超类,基类

子类可以直接用父类的成员(不是全部)

 

2.继承的好处:

代码量减少

提高可维护性

继承使类和类之间产生了关系,导致了面向对象的三大特征,多态的诞生

Human h =

支持单继承,一个类只能直接继承一个类,不能同时继承多个类

一个子类只能有一个直接父类

支持多层继承

 

3.继承中的注意事项:

子类可以使用父类的成员(变量,方法),父类私有的子类不可以使用

 

弊端:打破类封装性

 

子类不能继承父类的构造方法:方法名不一样

不要为了继承而继承,继承后拥有父类全部内容

 

4.继承后子类和父类成员的变化

成员变量,构造方法,成员方法

成员变量:

子类有——使用子类自己的

子类没有——使用父类的

子类父类都没有——编译失败

 

方法就近访问原则,变量方法自己有就用自己的

在子类中,访问父类的成员,新的关键字super

变量:super.父类成员

方法:super()

super父类存储空间标识,this

 

例:

 1 package Zsh.SuiSui03;
 2 
 3 public class ExtendsDemoss {
 4     /*
 5        继承
 6      */
 7 
 8     public static void main(String[] args) {
 9 //        Students s = new Students();
10 //        Teachers t = new Teachers();
11 //        s.name = "如懿";
12 //        t.name = "魔法小厨娘老师";
13 //        s.sleep();
14 //        s.drink();
15 //        s.eat();
16 //        t.sleep();
17 //        t.eat();
18 //        t.drink();
19 
20         Zi zi = new Zi(1);
21 
22     }
23 }
24 
25     class Human
26     {
27         String name;
28         public void sleep(){
29             System.out.println(name+ " 睡觉 ");
30         }
31         public void eat(){
32             System.out.println(name+ " 吃饭 ");
33         }
34         public void drink(){
35             System.out.println(name+ " 喝水 ");
36         }
37     }
38     class Students extends Human
39     {
40 
41     }
42     class Teachers extends Human
43     {
44 
45     }
46 
47     class Fu
48     {
49         String name;
50         int age;
51         Fu(){
52             System.out.println("这是父类的无参构造方法");
53         }
54         Fu(int age){
55             System.out.println("这是父类的有参构造方法" + age);
56         }
57     }
58 
59     class Zi extends Fu
60     {
61         String name;
62         Zi(){
63             System.out.println("这是子类的无参构造方法");
64         }
65         Zi(int age){
66             super(1);
67             System.out.println("这是子类的有参构造方法" + age);
68         }
69 
70 //        public void say(String name){
71 //            System.out.println(name);
72 //        }
73     }

 

 

posted @ 2021-03-29 14:24  轩er  阅读(36)  评论(0)    收藏  举报