封装和继承

目录

一.封装

1.封装的定义:

2.封装的作用

3.什么情况下用封装

4.set和get方法

二.继承

 1.继承的定义

 2.继承的作用

 3.继承的优缺点

4.继承的格式

5.Super关键字


一.封装

前言:

封装是面对对象三大特征之一。封装可以隐藏实现细节,仅对外暴露公共的访问方式,保证内部结构的安全。

1.封装的定义:

        封装就是将对象运行所需要的资源封装在程序对象中,并给外界公布接口,这样很复杂的逻辑经过包装之后给其他类使用就很方便,其他类不需要关心你里边的功能是以哪种方式实现的,只要传入需要的参数就可以得到想要的结果。

2.封装的作用

  1. 提高代码的安全性,就是说我只给外界暴露尽可能少的东西,这样对内部是比较安全的,同时也避免了在外部无意的破环,保护了内部的数据
  2. ​ 提高代码的复用性。就是说比如在遇到这个问题,我不使用封装,那么解决了这个问题,在下次又遇到的类似的问题还要继续再敲一遍代码吗?所以代码封装以后,我i就再给他一个接口,或者少许的修改一下就可以了
  3. “高内聚”,是指类的内部数据操作细节我们自己完成,不允许外部干涉。我们将内部的细节封装,隐藏起来,这样不仅便于后期内部代码的修改,更是提高了可维护性。
  4. “低耦合”,是指仅需暴露少量的方法给外部使用,尽量方便外部使用。就是说简化外部调用,便有调用者使用,便于扩展和协作。

**如何封装:**创建你需要的类,解决方案管理器右键,然后添加一个类,创建类的名称,确定。

3.什么情况下用封装

  1. 保护字段/数据,这个字段/数据我不想让外界用户知道,就使用封装
  2. ​ 但是可以让外部修改它,这个时候就使用到封装(属性封装)
  3. ​ 这个字段/数据我要限制用户输入的值,比如说这个字段是sex性别,只能输入男和女,超出了这个范围 就没有数据,所以我们要限制用户输入的内容,这个时候就使用封装
  4. ​ 就是只提供这个数据可以给用户外界使用,但不能修改它,此时就用到的封装
     

4.set和get方法

在使用private访问修饰符进行封装时,要留给用户一个展示口看到我们想给用户看到的信息,所以就用到了set()和get()方法。

作用:一般来讲,get是取来值的方法,set是设置值的方法,因为get在英文中有取,拿的意思,而set有设置的意思,所以用源get,set能很形象的明白方法的目的,比如对于一个name属性,getName就是取出这个name的名称,而setName就是设置name的名称。

 代码介绍:

//动物类
public class Animal{
    //私有化:宠物名
    private String name;
    //私有化:性别
    private String sex;
    //生成set和get方法
    //获取名字
    public String getName() {
        return name;
    }
    //设置名字
    public void setName(String name) {
        this.name = name;
    }
    public String getSex(){
        return sex;
    }
    public String setSex(String sex){
        this.sex = sex;
    }
}


//测试类
public class DogTest{
    public static void main(String[] args){
        //创建一个对象
        Dog dog = new Dog();
        //将名字和性别传到Dog类中
        dog.setName("可可");
        dog.setSex("雌");
        //展示狗狗的名字和性别
        System.out.println(dog.getName + dog.getSex);
    }
}

二.继承

前言:

继承是面向对象语法的三大特征之一。继承可以降低代码编写的冗余度,提高编程的效率。通过继承,子类获得了父类的成员变量和方法。

 1.继承的定义

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

 2.继承的作用

通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。 

 3.继承的优缺点

优点:

  • 继承过来的字段和方法,可以像任何其他字段和方法一样被直接使用;
  • 在子类中可以声明一个与父类中同名的新字段或静态方法,从而“隐藏”父类中的字段或方法;
  • 可以在子类中声明一个在父类中没有的新字段和方法;
  • 可以在子类中编写一个父类当中具有相同名的新实例方法,这称为“方法重写”或“方法覆盖”;
  • 可以在子类中编写一个调用父类构造方法的子类构造方法,既可以隐式地实现,也可以通过使用关键字super来实现。
     

缺点:

当父类发生变化时,子类不得不跟着变化,削弱了子类的独立性

4.继承的格式

        public class子类名 extends 父类名{}

class 父类{
    ...       //成员变量、成员方法
}
class 子类 extends 父类{
    ...       //类体
}
//声明一个teacher类为父类
class teacher{
    //定义父类的成员变量name、age         
	String name;      	      
	int age;
    //定义父类成员方法,将成员变量输出
	void show(){           
		System.out.println(name); 	  
		System.out.println(age); 
	}
}
//声明一个Student类为子类并继承父类
class Student extends teacher {     
}
public class myfirst {
	public static void main(String[] args) {
	System.out.println("学生");
    //声明一个Student类的实例对象student
	Student student=new Student();  
    //子类调用父类的成员变量name并赋值   
	student.name="Tom"; 
    //子类调用父类的成员变量age并赋值          
	student.age=19; 
    //子类调用父类的成员方法show                   
	student.show();                    
	}
}


//输出结果

学生
Tom
19

注意:

  • 子类不能选择性继承父类;
  • Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;
  • 构造方法不会被子类继承,但可以从子类中调用父类的构造方法。

5.Super关键字

super:调用父类中重写的方法、访问父类中被隐藏的字段

子类重写了父类中的某一个方法,隐藏父类中的字段,假如想在子类中访问到父类中被重写的方法和隐藏父类的字段,可以在子类中通过使用关键字super来调用父类中被重写的方法和访问父类中被隐藏的字段

例如:

class Animal{
    public String name="琪琪";         //添加成员变量
	public void sat() {                //添加成员方法say
		System.out.println("我是父类A成员方法say");
	}
}
class Dog extends Animal{
    public String name="暖暖";         //与父类中同名的字段,隐藏父类
	public void sat(){                 //重写方法say
		super.sat();                   //使用super关键字调用父类中的方法
		System.out.println("我是子类B成员方法sat");
        System.out.println("父类的name名字:"+super.name); //使用super关键字访问父类中的变量
	}
}
public class Two {
	public static void main(String[] args) {
	  Dog dog=new Dog ();                     //创建子类的一个实例对象
	  dog.sat();                         //调用子类中重写的方法
	  System.out.println("子类的name名字:"+dog.name);   //调用子类中的name
	}
}

//运行结果

我是父类Animal成员方法sat
我是子类Dog成员方法sat
父类的name名字:琪琪
子类的name名字:暖暖

使用super调用父类的无参数构造方法/有参数构造方法

子类不继承其父类的构造方法。

  • 当使用无参数的super()时,父类的无参数构造方法就会被调用;
  • 当使用带有参数的super()方法时,父类的有参数构造方法就会被调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值