java封装继承多态等
Java  /  管理员 发布于 4年前   317
最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。
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。
父类不可以强制转换为子类,因为子类有的方法父类可能没有
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号