`

java封装继承多态等

阅读更多

       最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。

    1、final关键字

      译为:最终的

         final修饰的数据类型的量都是不能改变的

        final修饰的类是不能被继承的

        final修饰的方法在子类中是不能被重写的

package cn.bjsxt.oop.testFinal;


public /*final*/ class Animal {    //final修饰类则说明,这个类不能被继承!
	
	public /*final*/ void run(){   //final加到方法前面,意味着该方法不能被子类重写!
		System.out.println("跑跑!");
	}

}


class Bird  extends Animal {
	
	public void run(){
		super.run();
		System.out.println("我是一个小小小小鸟,飞呀飞不高");
	}
	
}

package cn.bjsxt.oop.testFinal;

public class TestFinal {
	public static void main(String[] args) {
		final int MAX_VALUE= 200;    //常量。
		double d = Math.PI;
	}
}

 

 

2、隐式参数this

java类里面的方法都有两个隐藏的参数分别是super和this,分别表示直接父类和自己类的对象。默认就加入进去了,不需要手动添加

 

package cn.bjsxt.oop.testThis;

public class Student {
	 String name;
	 int id;   
	 
	 public  Student(String name,int id){
		 this(name);   //通过this调用其他构造方法,必须位于第一句! Constructor call must be the first statement in a constructor
		 this.name = name;
		 this.id = id;
	 }
	 
//本来是这样	 public Student(String name,Student this,Object super){
		 this.name = name;
	 }
	 public Student(){
		 System.out.println("构造一个对象");
	 }
	 
	 public void setName(String name){
		 this.name = name;
	 }
	 
	 
	 public void study(){
		 this.name=  "张三";
		 System.out.println(name+"在學習");
	 }
	 
	 public void sayHello(String sname){
		 System.out.println(name+"向"+sname+"說:你好!");
	 }
	
}



 3、Object类,Object是所有类的父类,默认就继承这个类

 

package cn.bjsxt.oop.testObject;

//不重写Object类的toString方法时,我们打印对象会
直接输出hash码,重写之后就返回这个字符串
public class Mobile {
	public String toString(){
		return "我是一部移动电话";
	}
}
package cn.bjsxt.oop.testObject;

public class TestObject {
	public static void main(String[] args) {
		Object obj = new Object();
		Object obj2 = new Object();
		System.out.println(obj.toString());
		System.out.println(obj2.toString());
		System.out.println(obj==obj2);
		System.out.println(obj.equals(obj2)); 
		
		
		Mobile m = new Mobile();
		System.out.println(m.toString()); 
		
	}
}

 输出:java.lang.Object@64ea66
java.lang.Object@158f9d3
false
false

我是一部移动电话

 

静态

 

package cn.bjsxt.oop.testStatic;

public class Student {
	 String name;
	 int id;   
	 
	 static  int  ss;
	 
	 public static void printSS(){
		 System.out.println(ss);
	 }
	 

	 public void study(){
		 printSS();
		 System.out.println(name+"在學習");
	 }
	 
	 public void sayHello(String sname){
		 System.out.println(name+"向"+sname+"說:你好!");
	 }
	
}



package cn.bjsxt.oop.testStatic;

public class Test {
	public static void main(String[] args) {
		Student.ss = 323;
		Student.printSS();
		
		Student s1 = new Student();
		
	}
}

 

静态代码块

package cn.bjsxt.oop.staticInitBlock;

public class Parent001 /*extends Object*/ {
	static int aa;
	static {
		System.out.println(" 静态初始化Parent001");
		aa=200;
	}
}

package cn.bjsxt.oop.staticInitBlock;

public class TestStaticInitBlock extends Parent001 {
	
	static int a ;
	
	static {
		System.out.println("静态初始化TestStaticInitBlock!");
		a = 100;
	}
	
	
	public static void main(String[] args) {
		
	}
}

  静态初始化Parent001
静态初始化TestStaticInitBlock!

 

封装encapsulation,记忆capsul,胶囊

比如把属性设为私有,同时提供共有的方法访问或者设置属性值

 

继承与组合

继承:isa

package cn.bjsxt.oop.inherit;

/**
 * 测试继承
 * @author dell
 *
 */
public class Animal /*extends Object*/ {
	String eye;
	
	public void run(){
		System.out.println("跑跑!");
	}
	public void eat(){
		System.out.println("吃吃!");
	}
	public void sleep(){
		System.out.println("zzzzz");
	}
	
	public  Animal(){
		super();
		System.out.println("创建一个动物!");
	}
	
}

class Mammal extends Animal {
	
	public void taisheng(){
		System.out.println("我是胎生");
	}
	
}

class Bird  extends Animal {
	public void run(){
		super.run();
		System.out.println("我是一个小小小小鸟,飞呀飞不高");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
	public Bird(){
		super();
		System.out.println("建一个鸟对象");
	}
	
}

 

 

组合:hasa

package cn.bjsxt.oop.inherit;

/**
 * 测试组合
 * @author dell
 *
 */
public class Animal2 {
	String eye;
	
	public void run(){
		System.out.println("跑跑!");
	}
	public void eat(){
		System.out.println("吃吃!");
	}
	public void sleep(){
		System.out.println("zzzzz");
	}
	
	public  Animal2(){
		super();
		System.out.println("创建一个动物!");
	}
	
	public static void main(String[] args) {
		Bird2 b = new Bird2();
		b.run();
		b.animal2.eat();
	}
	
}

class Mammal2  {
	Animal2 animal2=new Animal2();
	public void taisheng(){
		System.out.println("我是胎生");
	}
	
}

class Bird2  {
	Animal2 animal2=new Animal2();
	
	public void run(){
		animal2.run();
		System.out.println("我是一个小小小小鸟,飞呀飞不高");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
	public Bird2(){
		super();
		System.out.println("建一个鸟对象");
	}
	
}

 

 

继承时带来的强制类型转换,和基本数据类型一样,引用数据类型也会有类型的转化

package cn.bjsxt.oop.polymorphism;

public class Animal {
	String str;
	public void voice(){
		System.out.println("普通动物叫声!");
	}
}

class Cat extends Animal {
	public void voice(){
		System.out.println("喵喵喵");
	}
	public void catchMouse(){
		System.out.println("抓老鼠");
	}
}

class Dog extends Animal {
	public void voice(){
		System.out.println("汪汪汪");
	}
	
	public void seeDoor(){
		System.out.println("看门!");
	}
	
}

class Tiger extends Animal {
	public void voice(){
		System.out.println("哇哇哇");
	}

	
}

class Pig extends Animal {
	public void voice(){
		System.out.println("哼哼哼");
	}
}

 动物都会发声,重写voice方法,不同的动物有不同的发声方法。有的动物还有自己父类所不具备的方法,猫会抓老鼠,狗会看门。

 

package cn.itcast_04;

public class Test {
	
	public static void testAnimalVoice(Animal c){
		c.voice();
		if(c instanceof Cat){
			((Cat) c).catchMouse();
		}
	}
	
	 
	public static void testAnimalVoice(Dog c){
		c.voice();
	}
	
	public static void testAnimalVoice(Pig c){
		c.voice();
	} 
 
	public static void main(String[] args) {
		//父类的引用指向子类的对象
              Animal a = new Cat();
                //强制类型转化,低到高
		Cat a2 = (Cat)a;
                //a是Cat实例的引用,会调用捉老鼠的方法
		testAnimalVoice(a);

                / /完成了强制类型转化
      	        a2.catchMouse();

 		Animal b = new Dog();
 		Animal c = new Tiger();
 		testAnimalVoice(b);
 	testAnimalVoice(c);
		
	}
}

 要考虑编译(eclipse不带有红叉报错)和运行阶段的错误(不抛出异常,比如ClassCastException)

代码改成:

 Animal a = new Animal();
                //强制类型转化,低到高
Cat a2 = (Cat)a;
则:抛出

cn.itcast_04.Animal cannot be cast to cn.itcast_04.Cat。

父类不可以强制转换为子类,因为子类有的方法父类可能没有

 

 

 

 

 

分享到:
评论

相关推荐

    封装继承多态总结

    封装继承多态总结

    Java封装继承多态实例以及文件流操作

    在这个实例中,我们将探讨四个关键概念:封装、继承、多态以及文件流操作,这些都是Java中的核心特性,也是理解OOP(面向对象编程)的基础。 首先,**封装**是面向对象编程的核心理念之一,它涉及将数据和方法捆绑...

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析

    Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态的综合练习答案解析

    java封装 继承与多态

    java封装 继承与多态 程序设计 类与对象

    java面向对象三要素封装继承和多态源码

    java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...

    java基础继承封装多态

    本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...

    java面向对象的基本知识,封装继承多态等

    java面向对象的基本知识,封装继承多态等

    JAVA封装继承与多态PPT教案学习.pptx

    JAVA 封装继承与多态 PPT 教案学习 JAVA 封装继承与多态是面向对象程序设计语言中三个重要的概念,本文将对这三个概念进行详细的解释。 一、封装 封装是指隐藏对象的内部细节,使对象外部不能随意存取对象的内部...

    JAVA面向对象基础测试题-继承-封装-多态等测试题.docx

    OOP 的主要特征包括封装、继承和多态。 1. **封装**:封装是将数据和操作数据的方法捆绑在一起,隐藏对象的属性和实现细节,仅对外提供公共访问方式。这样可以减少外部环境对对象的影响和破坏,提高代码的安全性和...

    详解java封装继承多态

    Java 封装继承多态详解 Java 中的封装、继承和多态是面向对象编程(Object Oriented Programming)三大特性。下面,我们将详细介绍这三者之间的关系和应用。 封装是指将数据和方法放入类中,并控制对数据的访问...

    Java SE编程入门教程 java封装继承多态(共56页).pptx

    在Java中,`extends`关键字用于实现继承,多态则通过方法重写和抽象类/接口来实现。 3. **类和对象**:类是对象的蓝图,它定义了对象的属性(变量)和行为(方法)。对象是类的实例,具有类定义的属性和方法。Java...

    java中继承与多态的题目

    Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...

    Java 面向对象(继承、多态).ppt

    面向对象的概念 掌握类的继承、方法重写、super关键字的使用、final关键字 熟悉面向对象继承和多态的概念

    java总结,基础语法,面向对象,封装继承多态,异常

    java总结,基础语法,面向对象,封装继承多态,异常

    前端模块化脚手架,可实现类似java的封装继承多态特性

    这个名为“前端模块化脚手架”的工具,旨在为前端开发者提供一个类似于Java语言的封装、继承和多态特性的开发环境。通过这样的框架,开发者可以在JavaScript中模拟出面向对象编程的特性,使前端开发更加规范和高效。...

    java 三大特性--封装、继承和多态理解

    通过分析给定的文件名称"demo",我们可以推测这是一个示例代码或者演示程序,可能包含了对Java封装、继承和多态的实践应用。在深入研究这个"demo"文件之前,开发者可以先理解这三个基本概念,以便更好地理解代码逻辑...

    封装、继承、多态.docx

    封装、继承、多态 一、 封装 封装是面向对象编程的三大特性之一,它是指将同一类事物的特性与功能包装在一起,对外暴露调用的接口...Java 面向对象的三大特性是:封装、继承与多态。这三大特性是面向对象编程的核心。

    一个实例告诉你什么是封装继承和多态

    封装、继承和多态是面向对象编程的三大特性,它们是Java、C#、Python等许多编程语言中的核心概念。本文将通过一个实例详细解析这三个概念,并以`ConsoleApplication1`为例来阐述。 首先,封装是面向对象编程的基础...

    four_java继承封装和多态_four_againgpg_

    在Java编程语言中,继承、封装和多态是面向对象编程的三大核心概念,它们构成了Java类层次结构的基础。在这个名为"four_java继承封装和多态_four_againgpg_"的压缩包中,我们预计将看到三个不同的Java类,这些类展示...

Global site tag (gtag.js) - Google Analytics