java面向对象三大特征------封装,继承,多态

面向对象三大特征------封装,继承,多态

封装:尽肯能的隐藏对象的内部细节,控制对象的访问修改权限
类中定义私有属性:

private int age;

实例对象,对属性进行赋值

Dog dog =new Dog();

dog.age = 20;     报错 私有属性不可访问,,如果不是private直接赋值可能会有非法数据的录入

这时可以在类中定义公共方法  setter getter方法,对象外可以通过调用set方法进行赋值,在set方法中判断输入数据是否合法
继承:类与类之间的特征和行为的一种赠与或获得

在一组相同或类似的类中,抽取出共性的特征和行为,定义在父类中,实现重用 子类 extends 父类

可以直接调用父类的属性和方法,提高代码复用性和可扩展性

不可继承:构造方法 ; Private修饰的属性方法 ; 父子类不在同一个package中时,default修饰的属性和方法;

方法重写:父类的方法不能满足子类,在子类中重写方法,方法名,参数,返回值类型必需相同,访问修饰符可以相同或扩大范围,主要是对方法内部的代码进行修改

super关键字可以在子类中访问父类的方法 super.方法名();访问父类的方法,完成父类方法在子类中的复用,在添加其他代码 super.属性 也可以访问父类属性; super(value); 调用父类构造方法,无参/有参

this 与super必需在构造方法首行,且在同一个类的同一个构造方法只能出现一个

父子类的同名属性无关,不存在重写关系,使用时 用不同的前缀

class A {     public void aa (  )  {   syso  (  输出 )  }   }     

class B extends A {  a();   public void a (  )  {   super.A( ) ; syso(代码)  }   }    
  //复用父类方法   输出  :   输出代码

子类在创建对象中,会先对父类创建对象,最终形成完整子类对象,有父类的共性内容,还有子类自身添加的内容

访问修饰符:public protected default private
private : 仅本类可以使用(多)
default : 同包下可以使用,默认修饰符(少)
protected : 不同包下的类可以使用(少)
public : 都可以使用(多)

多态:父类引用指向子类对象,从而产生多种形态。

Animal animal = new Dog(); (多态核心概念,向上转型,装箱)

Dog dog = (Dog) animal; (向下转型,拆箱)

将父类引用中的真实子类对象强制转回子类本身,只有转回子类真实类型,才可以调用子类独有的属性和方法。
instanceof 判断引用的对象的类型 语法:父类引用 instanceof 类型 返回true/false
二者具有直接或间接的继承关系时,父类引用可指向子类对象形成多态。
父类引用仅可调用父类所声明的属性和方法,不可调用子类独7有的属性和方法
方法重载使用太多,耦合太高,可以使用父类作为方法参数,,使方法参数类型更广泛

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态好处:
  1. 可替换性
  2. 可扩充性
  3. 接口性
  4. 灵活性
多态使用场景:
  1. 使用父类作为方法形参实现多态,使方法参数的类型更广泛。
  2. 使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

```java
											1
public class Animal {  //父类animal

	public Animal(){
		System.out.println("animal");
	}
	public void feed(Animal animal) {
		System.out.println(animal.name);
    }	
}

public class Student extends Animal{  子类Student

	public Student(){
		System.out.println("Student");
	}	
}

public class Test {

	public static void main(String[] args) {
		Animal animal = new Animal();
		animal.feed(new Student());     //使用父类作为方法形参实现多态,使方法参数的类型更广泛
		//等价于  Animal animal2 = new Student();   animal2.feed(animal);
		//可传递本类型对象和所有子类对象
	}

}

											2
public class Animal {  //父类animal
	public Animal(){
		System.out.println("animal");
	}
	public Animal buy(int money) {
		if (money>2) {  
			return new Person();   //返回父类对象指向的子类  可返回本类型对象和所有子类对象
		}else {
			return new Student();
		}
	}
}

class Person extends Animal(){  //子类 Person 继承animal
	public Person(){
		System.out.println("Person");
	}
}

class Student extends Person(){  //子类student 继承 Person
	public Student(){
		System.out.println("Student");
	}
}

public class Test {

	public static void main(String[] args) {
		Animal animal = new Animal();
		animal.buy(3);   //使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。
		//调用父类的buy方法,返回类型是  Animal  ,所以返回的是new Student,,(父类对象指向子类)
	}

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值