Java学习第11天(包,面向对象的特征,继承,方法重写等知识点)

包:类过多,用包来进行分类管理。

为什么需要使用包?

(1)分门别类的进行管理。(2)提升程序的安全性能。

java中声明包:

package testextends2;

             使用package进行声明

声明包是确定class的位置,而不是.java源文件的位置!

声明包的要求:

(1)包名小写(2)使用域名倒置(3)声明包的时候必须只能声明一次

面向对象的三个特征:

(1)封装-》提升代码的安全性(2)继承:提示代码的复用性(3)多态:提升程序的拓展性

封装:

1)public:公众的,任何地方都可以访问到(整个项目)

2)protect:子类及自己可以访问到。

3)package:包内即可访问到

4)private: 只能本类才能访问到。

如何使用封装来保证属性的安全性?

1:首先使用private修饰类中的成员变量(属性)

2:在赋值取值使用get和set方法

3:在赋值方法中进行合理的验证。

package com.bjsxt.day2;
public class Student{
        //(1)属性私有化
        private String name;
        private int age;
        private String gender;
        
        //(2)提供公有的取值,赋值方法
        public void setAge(int age){
                //(3)在赋值的方法中对值进行合理性验证
                if(age<18||age>30){
                        System.out.println("对不起,学生的年龄要在18到30之间");
                        this.age=18;//给属性设置成默认值
                }else
                        this.age=age;//将局部变量的值赋给成员变量
        }
        
        public int getAge(){
                return age;
        }
        
        public void setGender(String gender){
                if(!"男".equals(gender) &&!"女".equals(gender)){
                        System.out.println("对不起,性别有误");
                        this.gender="男";
                
                }else
                        this.gender=gender;
        }
        public String getGender(){
                return gender;
        }
        public void setName(String name){
                this.name=name;
        }
        public String getName(){
                return name;
        }
        
        //构造方法
        public Student(){
        
        }
        public Student(String name,int age,String gender){
                this.name=name;
                //this.age=age;
                //this.gender=gender;
                this.setAge(age);  //调用本类的成员方法
                this.setGender(gender);
        }
        public void show(){
                System.out.println(name+"\t"+age+"\t"+gender);
        }
}

测试:

package com.bjsxt.day2;
public class TestStudent{
        public static void main(String [] args){
                Student stu=new Student();
                stu.setAge(9); //对象名.方法名
                System.out.println(stu.getAge());
                
                stu.setGender("人妖");
                System.out.println(stu.getGender());
                
                Student stu2=new Student("张三",12,"人妖");
                stu2.show();
        }
}

结果如图所示:

JavaBean是一个特殊的类:

1:首先类需要public修饰

2:使用get和set方法

3:属性是private

4:提供一个无参的构造方法

继承:

继承是N多个类的抽象,从N多个类抽象总结出来的属性和方法。也就是父类。

继承的代码实现:

package com.bjsxt.extends1;
public class Person {//父类
    private String name;
    private int age;
    private String gender;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    public Person() {
    }
    public void introduce(){
        System.out.println("姓名:"+name+"\t年龄:"+this.getAge()+"\t性别:"+this.gender);
    }
}

子类继承父类,拥有父类的属性和方法

package com.bjsxt.extends1;
public class Student extends  Person {//Student类是Person类的扩展
    private String stuNo;
    public String getStuNo() {
        return stuNo;
    }
    public void setStuNo(String stuNo) {
        this.stuNo = stuNo;
    }
    public Student(String name, int age, String gender, String stuNo) {
        super(name, age, gender);//调用父类的带三个参数的构造方法s
        this.stuNo = stuNo;
    }
    public Student() {
        
    }
}

实现:

package com.bjsxt.extends1;
public class Test {
    public static void main(String[] args) {
        //(1)创建Student类的对象
        Student stu=new Student("张三",20,"男","sxt1001");
        //创建Teacher类的对象
        Teacher tea=new Teacher("李四",30,"男",6);
        //来个自我介绍
        stu.introduce(); //父类的方法,子类可以继承
        tea.introduce();
    }
}

一个类只能继承一个父类

子类可以继承父类的非private的属性和非private的方法,不能继承构造方法,可以调用父类的构造方法。

 

super关键字的作用:

a) super关键字可以调用父类的非private的方法和非private的属性。

b)调用父类的构造方法 ,但是必须要在子类的构造方法的第一句。

c)区分父类和子类同名的属性,比如super.name和this.name,super代表着父类的,this代表着子类的。

继承关系下调用子类对象的执行顺序

 

调用顺序就是:儿子调用老子,老子调用爷爷辈,直到(Object)

执行顺序就是先是最大的object的无参构造方法,然后是爷爷的参数,然后是爷爷的构造方法,自己的参数,自己的构造方法

方法重载:

1)本类中

2)方法名称相同

3)参数不同(类型,个数,顺序)

4)与访问权限和访问类型值无关

方法重写:

父类的方法不能满足子类的需求

1)发生在子类

2)方法名,参数与父类方法完全相同

3)返回值<=父类的类型  这里的返回值必须要与父类的返回值有一定的关系

4)访问权限必须要>=父类的返回值类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值