Java从头开始--封装、继承和多态

本文详细介绍了Java中的面向对象三大特性:封装、继承和多态。封装通过隐藏类的内部细节,提高代码安全性;继承允许子类继承父类的属性和方法,提高代码复用;多态则提供了灵活性,使得父类引用可以指向子类对象。文章还涵盖了this关键字、构造方法、super关键字、方法重写、抽象类、接口和final的使用。
摘要由CSDN通过智能技术生成

面向对象的三大特征

1.面向对象语言的三大特征
封装
继承
多态

封装

封装的概念

将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。

封装的好处

在这里插入图片描述

封装的具体表现

属性使用private权限
方法使用public权限

例如:

  public class Demo{
   
		private String name;         
		public String getName (){
    
			return name;
		}    
		public void setName(String name){
                                                this.name = name;
              	}
         } 

this关键字

this关键字代表自身类的对象

使用this关键字引用成员变量

使用this关键字引用成员方法

注意this关键字必须放在非静态的方法里面

在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式类引用成员变量名,常常用来区分同名的成员变量和局部变量

例如:

public class Demo{
   
	private int a;		
	public Demo(int a){
   
	    this.a = a;
	}		
	public int getA(){
   
		return a;
	}		
	public void setA(int a){
   
		this.a = a;
	}
}

实例1:

package com.ff.javaoop.day4;
/*
面向对象的三大特征:封装,继承,多态
 */
/*
封装:将类中的某些信息(成员变量,方法)隐藏起来,不让外部的程序直接访问,可通过专门的方法来实现对隐藏信息的操作和访问。
 */
public class Dog {
   
    private String name;
    private int age;
    //用构造方法实现对私有方法的调用

    /*public Dog(String name,int age){
    if(name.length()<5){
        this.name = name ;
        }
        this.age = age;
    }*/

    //为私有的属性提供专门的方法访问,可以实现控制
    // this 表示的是当前正在访问的对象,this关键字必须放在非静态的方法中
    public void setName(String name) {
   
        if (name.length() <= 7) {
   
            this.name = name;
            this.eat();//在本类中访问私有权限的方法
        }
    }

    public void setAge(int age) {
   
        this.age = age;
    }

    public String getName() {
   
        return name;
    }

    public int getAge() {
   
        return age;
    }
//私有权限的方法
    private void eat() {
   

    }
}

package com.ff.javaoop.day4;

public class DogTest {
   
    public static void main(String[] args) {
   
        /*Dog dog = new Dog("dkjf",20);
    	Dog dog1 = new Dog("wangcai",23);
    	*/

        Dog dog = new Dog();
        dog.setName("王二狗");
        dog.setAge(20);
        System.out.println(dog.getAge());
        System.out.println(dog.getName());
    }
}

运行结果:

在这里插入图片描述

继承

在这里插入图片描述

人类都有姓名,年龄等属性和方法

学生类可以继承人类,但他们有自己特有的属性和方法如学号等

工人类可以继承人类,但他们有自己特有的属性和方法如工号等

小学生类、中学生类和大学生类都可以继承学生类

继承:继承是面向对象语言的一种设计思想,可以提高代码的可重用性(子类可以使用父类),代码的可扩展性(子类可以有自己的功能)

什么样的关系可以继承?

学生属于人

工人属于人

符合is-a关系的设计,使用继承

将子类工有的属性和行为放到父类中

继承的形式:

[访问权限修饰符] [修饰符] 子类名 extends 父类名{子类体}

例如:

public class Animal{
   
	public void eat(){
   
        
    }
}

public class Dog  extends Animal{
   
	public void play(){
   
        
    } 
}

//子类对象可以直接调用父类的方法,强调复用性
 Dog  dog = new Dog ();
     dog.eat();

继承的传递性:

C类从B类继承,B类又从A类继承,那么C类就具有B类和A类的所有非私有属性和非私有方法。

当一个没有继承任何一个类时,jvm会默认让类继承Object类,Object是 java为所有类提供的基类。

实例2.1:

package com.ff.javaoop.day4;

public class Animal {
   
    private String name ;
    private int age;

    public void eat(String name){
   
        System.out.println(name+"开饭了");
    }

    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;
    }
}

package com.ff.javaoop.day4;
/*
Cat 类继承Animal
Cat是Animal的子类(派生类)
extends关键字
java中一个类只能直接继承一个类
 */
public class Cat extends Animal {
   
private String specie;

public  void barking(){
   
    System.out.println("喵喵叫");
}

    public String getSpecie() {
   
        return specie;
    }

    public void setSpecie(String specie) {
   
        this.specie = specie;
    }
}

package com.ff.javaoop.day4;
/*
Pig 类继承Animal
Pig是Animal的子类(派生类)
extends关键字
java中一个类只能直接继承一个类
 */
public class Pig extends Animal{
   
    private String specie;
    public  void barking(){
   
        System.out.println("哼哼");
    }

    public String getSpecie() {
   
        return specie;
    }

    public void setSpecie(String specie) {
   
        this.specie = specie;
    }
}

package com.ff.javaoop.day4;

public class TestAnimal {
   
    public static void main(String[] args) {
   
        Cat cat = new Cat();
        cat.eat("小咪");//继承父类的方法
        cat.setAge(2);//继承父类的方法
        cat.setName("小咪");//继承父类的方法
        cat.barking();//小猫自己的属性
        cat.setSpecie("折耳猫");//小猫自己的属性

        Pig pig = new Pig();
        pig.eat("猪猪");//继承父类的方法
        pig.setAge(3);//继承父类的方法
        pig.setName("猪猪");//继承父类的方法
        pig.barking();//猪自己的属性
        pig.setSpecie("非洲野猪");//猪自己的属性

        System.out.println(pig.getName()+"今年"+pig.getAge()+"岁了");
        System.out.println(cat.getName()+"今年"+cat.getAge(
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值