面向对象中的一些概念的理解
2018-08-10 11:16:09来源:博客园 阅读 ()
今天回顾的内容,可能相对于前面的内容来说在理解上需要花费一点功夫,但面向对象也是属于打基础的部分,学好虽然不能够加分,但是没有掌握到这方面的知识,在后续的基础学习中,会有一些问题。那,我们开始回顾今天的内容吧!!
package cn.tedu.object; public class PersonDemo { public static void main(String[] args) { //构造方法 --- 创建对象的 //调用构造方法创建 Person 对象 Person p = new Person("翠花"); p.name = "如花";//对象点出来的是一个成员变量 p.eat(); Person p2 = new Person(); p2.eat(); } } class Person{ String name; int age; char gender; String no; //身份证号,数字,还很多有的人的后面是 x //在类中没有手动指定构造方法的时候,那么在编译的时候会自动添加一个无参的构造方法 //没有返回值类型,与当前类同名 //构造方法中可以写 return,用于规避一些不合常理的数据 public Person(){ } //在代码中手动指定了含参构造,那么就不会再默认添加无参构造 public Person(String name){//开发了网站,用的人都要注册,写一个 user 类,用户的基本信息创建的时候就要写进来 //遵循就近原则 this.name = name; // Warning --- 警告 --- 智能工具编译到这儿的时候认为这个地方可能存在问题, //但是不影响程序的正常运行 } //Person p = new Person("珠子",-18); public Person(String name,int age){ this.name = name; if(age < 0){ return; } this.age = age; } public void eat(){ System.out.println("吃饭"); } }
package cn.tedu.object; public class ThisDemo { public static void main(String[] args) { Student s1 = new Student("Amy"); System.out.println("s1:" + s1); Student s2 = new Student("Sma"); System.out.println("s2:" + s2); s1.name = "Amyy"; } } class Student{ String name; int age; String no;//学号 //用 this 代替一个具体的对象 //this 代表当前在活动的对象 //this 在本类中调用本类中的属性和方法 public Student(String name){ this.name = name; System.out.println("this:"+this); } public Student(String name, int age){ } public Student(String name, int age, String no){ //this 调用的普通方法而不是构造方法 //this.Student(name,age); //this(参数列表) --- this 语句 //表示调用本类中对应形式的构造方法 //必须放在构造方法的首行 this(name,age); this.no = no; } }
package cn.tedu.object; public class CodeDemo { public static void main(String[] args) { Baby b1 = new Baby(); Baby b2 = new Baby("铁蛋"); } } //定义一个代表婴儿的类 class Baby{ String name; //构造代码块/初始化代码块 //无论利用哪个构造方法创建对象,构造代码块都会先于构造方法执行 //如果每一个构造方法都有一些要初始化的操作,可以将它们提取到构造代码块中执行 { this.cry(); this.eat(); } public Baby(){ System.out.println("running~~~"); } public Baby(String name){ // this(); this.name = name; //this.cry(); //this.eat(); } public void cry(){ System.out.println("这个婴儿在哇哇的哭"); } public void eat(){ System.out.println("这个小孩在吃奶"); } }
|
本类中
|
子类中
|
同包内中
|
其他类中
|
public
|
可以
|
可以()
|
可以(你的室友)
|
可以
|
protected(你自己的一些东西,你们寝室的扫帚)
|
可以
|
可以
|
可以
|
不可以(其他寝室的,来抢劫啊)
|
默认(没有给定的形式)(你们家的门,或者窗)
|
可以
|
同包子类可以,不同包子类不行
|
可以
|
不可以(你来弄,入室抢劫啊)
|
private(相当于自己的小秘密,私房钱,青春回忆)
|
可以
|
不可以
|
不可以
|
不可以(走在路上一人说给我点钱花呗,不行)
|
package cn.tedu.extendsx.b; import cn.tedu.extendsx.a.A; public class E extends A{ public static void main(String[] args) { D d = new D(); //对象的声明类是 D类,所以d对象所对应的子类是 D类 //因此d对象使用 m方法需要在对应的子类 D类中使用 //子类对象使用的时候必须在对应的子类中使用 //d.m(); } } //public class E{ // public static void main(String[] args) { // D d = new D(); // //虽然D通过继承A可以使用A类中m方法,但是m方法最终定义在A类中 // //m方法的权限是protected:本类中、子类中、同包类中 // //m方法的本类是A类,E和A是本类中? --- 不是 // //m方法是在E类中,E是A的子类吗? --- 不是 // //E类所在的包是b包,A类所在的包是a包,所以E和A是同包类吗1?---不是 // //d.m(); // } //}
package cn.tedu.fengzhuang; public class Rectangle { public static void main(String[] args) { GetRectangle rec = new GetRectangle(2, 4); System.out.println("周长:"+rec.getLong()+" 厘米,面积:"+rec.getSqure()+" 平方厘米"); } } class GetRectangle{ private double width; private double height; public double getWidth() { return width; } public double getHeight() { return height; } public GetRectangle(double width, double heigth){ if(width <= 0 || heigth == 0) return; this.width = width; this.height = heigth; } public double getLong(){ return 2 * (width + height); } public double getSqure(){ return width * height; } }
package cn.tedu.extendsx; public class ExtendsDemo { public static void main(String[] args) { Cat c = new Cat(); //通过继承,子类可以使用父类中的属性和方法 c.eat(); } } //父类 class Pet{ String name; String color; public Pet(String name){ } public Pet(String name, String color){ } public void eat(){ System.out.println("在吃东西"); } } //利用extends关键字让原来的类与提取出来的新的类产生了联系 --- 继承 //子类 class Cat extends Pet{ public Cat(){ //在子类构造方法中,如果没有手动指定,那么默认添加super() //super 语句 --- 表示调用父类中对应的形式的构造方法 //super() --- Pet() //如果父类中只提供含参构造,那么子类中就必须手动提供对应形式的构造方法 super("波斯猫"); } public void drink(){ //通过super代表父类对象,通过父类对象调用父类中的属性和方法 super.eat(); System.out.println("吃完东西喝点水"); } public void catches(){ System.out.println("这只猫在挠沙发"); } } //子类 class Dog extends Pet{ public Dog(){ //super("金毛","绿色"); super("二哈");//this();这两个不能够同时出现 super.color = "绿色"; } public void bark(){ System.out.println("这只狗在叫"); } }
package cn.tedu.duotai; public class DuotaiDemo { public static void main(String[] args) { //父类声明对象,用子类创建对象,利用向上造型来创建的这个对象 //对象在编译过程中并不会检查到底使用的是哪个子类,在编译期间只会检查声明类和实现类之间是否有继承关系, //直到运行的时候才会检查具体的子类然后根据子类来分配空间 Pet p = new Cat(); //p.catches(); //当使用向上造型来创建对象的时候,只能使用父类中声明的方法,而不能使用子类中单独定义的方法 p.eat(); } } class Pet{ public void eat(){ System.out.println("在吃东西~~~"); } } class Cat extends Pet{ @Override public void eat(){ System.out.println("这只猫在吃草~~~"); } public void catches(){ System.out.println("这只猫在抓老鼠"); } } class Dog extends Pet{ @Override public void eat(){ System.out.println("这只狗在吃猫~~~"); } public void bark(){ System.out.println("这只狗在叫"); } }
package cn.tedu.extendsx; public class OverrideDemo { private void mian() { // TODO Auto-generated method stub Teacher t = new Teacher(); //子类对象是调用重写之后的方法 t.work(); } } //表示职业的类 class Profession{ public void work(){ System.out.println("在工作~~~"); } } class Teacher extends Profession{ //父类中的方法写的比较简单,子类需要对父类中的方法进行扩展 @Override //@ 注解 //@Override 这个注解是用于校验当前方法是否构成了重写 public void work(){ System.out.println("这个老师在诲人不倦"); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- Java笔记:集合 2020-06-10
- 构造函数中的this()和super() 2020-06-10
- 怎么用Java 高效提取、替换、删除PDF文档中的图片 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash