JAVAOOP面向对象-多态和封装

1.3.1多态

多态:一种类型多种形态
鱼类:鲨鱼 鲤鱼 鲫鱼
人类: 黄种人 黑人 白人

Animal父类:

/**
* 父类
*/
public class Animal {
	String name;//名字
	int age;//年龄
	public void eat() {
		System.out.println("1动物吃东西~");
	}
}

Cat子类:

/**
* 子类
*/
public class Cat extends Animal{
	String name = "诚诚";
	public void eat() {
		System.out.println("2诚诚吃东西");
	}
	public void say() {
		System.out.println("喵喵喵");
	}
}

Dog子类:

public class Dog extends Animal{
}

测试类:

public static void main(String[] args) {
  //创建Cat的对象
  Cat cat = new Cat();
  //创建Dog的对象
  Dog dog = new Dog();
  //同一种类型,不同形态(同种Animal类型,cat猫形态的动物,dog狗形态的动物)
  //用Animal父类来声明对象
  //用Cat子类来实例化对象
  //Animal:这是一个动物
  //cat1:被叫做cat1
  //new Cat();:cat1是一只猫
  Animal cat1 = new Cat();//cat1是Animal类型的
  System.out.println("地址:"+cat1);
  //
  Animal dog1 = new Dog();//dog1是Animal类型的
  Cat cat2 = (Cat)cat1;
  System.out.println("地址:"+cat2);
  //使用多态时,属性的调用关系
  //调用属性时,看对象的类型,对象的类型是哪个,调用的就是哪个类里面的
  System.out.println(cat1.name);//null
  System.out.println(cat.name);//诚诚
  //使用多态时,方法的调用关系
  //如果子类方法覆盖了父类的方法,调用的都是子类中的方法
  cat1.eat();//2诚诚吃东西
  cat.eat();//2诚诚吃东西
  //能点出什么,要看类型中有什么
  //cat1.say();//错误,因为cat1是Animal类型,Animal类型中没有say()方法
  cat.say();
  //向上转型 子类对象  转为  父类对象
  //向下转型(强制类型转换) 父类对象  转为  子类对象
  //编译器 //运行期
  // Cat cat2 = (Cat)new Animal();//错java.lang.ClassCastException: 类转换
异常
}

package day20190916;
/**
* 将父类对象应用于子类的特征就是多态
* 1.多态
* 多态:一种类型多种形态(同种类型以不同的形态展现出来)
* 鱼类:鲨鱼、鲫鱼、鲤鱼
* 人类:黄种人、黑人、白种人
* 多态需要和继承联合起来使用,实现多态的话需要继承同一个父类
* 比如:猫、狗 都需要继承动物类
*
* 2.instanceof
*/
public class AnimalPolymDemo {
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
//同一种类型,不同形态(同种Animal类型,cat猫形态的动物,dog狗形态的动物)
//用Animal父类来声明对象
//用Cat子类来实例化对象
//Animal:这是一个动物
//cat1:被叫做cat1
//new Cat():cat1是一个猫
//向上转型
Animal cat1 = new Cat();//cat1是Animal类型的
Animal dog1 = new Dog();//dog1是Animal类型的
//向下转型(强制类型转换)
//Cat cat2 = (Cat) new Animal();//报错java.lang.ClassCastException
//使用多态时,属性的调用关系
//调用属性时,看对象的类型,对象的类型是哪个,调用的就是哪个类里面的
System.out.println(cat1.name);//动物 调用cat1的name属性,对象cat1是
Animal类型,所以调用的是Animal类型的name属性
System.out.println(cat.name);//猫
//使用多态时,方法的调用关系
//如果子类方法覆盖了父类方法,调用的都是子类中的方法
cat1.eat();
cat.eat();
//能点出什么,要看类型中有什么
//cat1.say();//错误,因为Animal类型中没有say方法
cat.say();
System.out.println(dog instanceof Animal);
}
}
package day20190916;
/**
* 父类:动物类
*
* 动物--狗类
* 子类的对象 转为 父类的对象 向上转型
* 父类的对象 转为 子类的对象 向下转型
*/
public class Animal {
String name = "动物";
int age;
public void eat() {
System.out.println("动物吃东西~~~");
}
}
package day20190916;
public class Cat extends Animal{
String name = "猫";
1.3.2instanceof关键字
instanceof:用于判断前面的对象是否是后面的类,或者其子类、实现类的实例
使用instanceof关键字做判断时, instanceof 操作符的左右操作数必须有继承或实现关系
## 1.4,面向对象--封装
使用电脑内部的设置我们不需要了解,比如看电影,我们不需要了解内部如何工作,只需要知道按键
ok 封装:将所有的属性私有化(private修饰)
public void eat() {
System.out.println("猫吃东西");
}
public void say() {
System.out.println("喵喵喵");
}
}
package day20190916;
public class Dog extends Animal{
}

1.3.2,instanceof关键字

instanceof:用于判断前面的对象是否是后面的类,或者其子类、实现类的实例
使用instanceof关键字做判断时, instanceof 操作符的左右操作数必须有继承或实现关系

public class Computer {//电脑
public static void main(String[] args) {
Pad pad = new Pad();
LenovoPad lenovoPad = new LenovoPad();
System.out.println("Pad是否继承自电脑?"+(pad instanceof Computer));
System.out.println("LenovoPad是否继承自Pad?"+(lenovoPad instanceof Pad));
System.out.println("LenovoPad是否继承自电脑?"+(lenovoPad instanceof
Computer));
System.out.println("Pad是否继承自LenovoPad?"+(pad instanceof LenovoPad));
//System.out.println("Pad是否继承自Animal?"+(pad instanceof Animal));//两
个没有任何继承关系的类,不能使用instanceof关键字进行比较
}
}
class Pad extends Computer{//平板电脑
}
class LenovoPad extends Pad{//联想平板电脑
}

1.4,面向对象–封装

使用电脑内部的设置我们不需要了解,比如看电影,我们不需要了解内部如何工作,只需要知道按键
ok 封装:将所有的属性私有化(private修饰)
即只能在本类中访问,如果在其他类中需要访问的话,就需要通过本类提供的特定getXXX和SetXXX方
法进行访问 注意:在面向对象的开发中,一般建议用封装的特性去编写实体类(将所有的属性私
有化并提供get和set方法) 封装的思想:将对象的属性和行
为封装起来,而将对象的属性和行为封装起来的载体就是类, 类通常对客户隐
藏其实现细节

public class PersonTest {
public static void main(String[] args) {
	Person person = new Person();
	//name被私有化,其它类中无法直接访问
	//System.out.println(person.name);
	System.out.println("未设置前:"+person.getIdCard());
	person.setIdCard("1001");
	System.out.println("设置之后:"+person.getIdCard());
	System.out.println("未设置前:"+person.getName());
	person.setName("甜甜");
		System.out.println("设置之后:"+person.getName());
		System.out.println("未设置前:"+person.getAge());
	person.setAge(18);
		System.out.println("设置之后:"+person.getAge());
	}
}

package day20190918;
public class Person {
	private String idCard;//身份证
	private String name;//姓名
	private int age;//年龄
public String getIdCard() {
	return idCard;
}
/**
* 修改属性值
* @param idCard:需要修改的值
*/
public void setIdCard(String idCard) {
	this.idCard = idCard;
}
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;
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种面向对象的编程语言,它支持面向对象程序设计(Object-Oriented Programming,简称OOP)。面向对象程序设计是一种编程范式,它将程序中的数据和操作数据的方法组织在一起,形成对象,并通过对象之间的交互来实现程序的功能。 在Java中,一切都是对象。每个对象都有自己的属性(数据)和方法(操作)。通过定义类(Class),我们可以创建多个对象,并使用这些对象来完成各种任务。 Java面向对象程序设计有以下几个核心概念: 1. 类(Class):类是对象的模板,它定义了对象的属性和方法。通过类可以创建多个具有相同属性和方法的对象。 2. 对象(Object):对象是类的实例化结果,它具有类定义的属性和方法。通过创建对象,我们可以使用类中定义的方法来操作对象的属性。 3. 封装(Encapsulation):封装是将数据和操作数据的方法封装在一起,形成一个独立的单元。通过封装,我们可以隐藏对象的内部实现细节,只暴露必要的接口给外部使用。 4. 继承(Inheritance):继承是一种机制,允许一个类继承另一个类的属性和方法。通过继承,子类可以重用父类的代码,并且可以在不修改父类的情况下扩展父类的功能。 5. 多态(Polymorphism):多态是指同一种类型的对象,在不同的情况下可以表现出不同的行为。通过多态,我们可以编写更加灵活和可扩展的代码。 Java面向对象程序设计使得代码更加模块化、可维护和可扩展。它提供了丰富的语法和特性,使得开发者可以更加方便地进行面向对象的编程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值