您的位置:首页 > 其它

面向对象程序设计思想&继承与关键字(5.22)

2015-05-24 22:08 393 查看
1.面向对象思想的编程方式

[1]创建类。属性,行为。

[2]创建对象。分配内存空间,初始化属性。

[3]调用对象中的行为。

2.继承

概念:子类扩展父类的功能。

子类扩展父类,可以得到父类的属性和方法,避免代码的重复冗余。

子类可以添加自己的属性和方法

子类可以重写父类的方法

java中使用extends关键字来完成继承

格式:public subclass extends superclass {}

注意:1.在java中只允许单继承(一个子类只能有一个父类,一个父类可以多个子类)

2.子类不能访问父类的私有成员

package com03;

public class Shape {
protected int a;
protected int b;

public Shape(int _a, int _b) {
// TODO Auto-generated constructor stub
a = _a;
b = _b;
}

int getArea()
{
return 0;
}
}
package com03;

public class Circle extends Shape{

public Circle(int _a) {
super(_a, _a);
// TODO Auto-generated constructor stub
}

int getArea()
{
return (int)(Math.PI * a * a);
}
}
package com03;

public class Rect extends Shape{

public Rect(int _a, int _b) {
super(_a, _b);
// TODO Auto-generated constructor stub
}

//子类覆盖了父类的方法
//方法的重写
//1.方法名一样,返回值一样,参数列表一样,子类的方法不能比父类方法拥有更低的权限。
public int getArea()
{
return a*b;
}
}
package com03;

public class Thriangle extends Shape {

public Thriangle(int _a) {
super(_a, _a);
// TODO Auto-generated constructor stub
}

int getArea() {
return (int) (Math.sin(Math.PI / 3) * a * a / 2);
}
}
package com03;

public class Trapezoid extends Shape {
public int c;
public Trapezoid(int _a,int _b,int _c) {
super(_a,_b,_c);

// TODO Auto-generated constructor stub
}

int getArea() {
return (int) (0.5 * ((a + b) * c));
}
}
package com03;

public class TRect extends Shape {

int h;

public TRect(int _a, int _b, int _h) {
super(_a, _b); //调用父类构造
// TODO Auto-generated constructor stub
h = _h;
}
}
package com03;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Circle c = new Circle(2);
System.out.println(c.getArea());
Rect r = new Rect(2, 2);
System.out.println(r.getArea());
Thriangle t = new Thriangle(10);
System.out.println(t.getArea());
}
}
3.访问控制修饰符

public 公共的 可以被所有类访问

private 私有的 只能被自己访问

缺省 只能被同包访问

protected 受保护的 可以被子类访问,也可以被同包访问

访问控制修饰符可以修饰类,属性,方法

类只能被public,缺省来修饰

4.关于父类和子类的构造方法

[1]如果父类只定义了带参的构造方法,那么子类必须在构造的第一行调用父类的构造方法。

例如super关键字

[2]如果父类没有定义构造方法或者父类定义的是不带参的构造方法,

那么子类不需要显示调用父类的构造

5.方法的重写(覆盖)override

概念:发生在父类和子类之间。

特点:1.方法名一样,返回值一样,参数列表一样。

2.覆盖的方法不能比父类中被覆盖的方法更严格的访问权限。

3.覆盖的方法不能比被覆盖的方法抛出更多的异常。

6.this和super

this表示当前对象

[1]this.属性

[2]this.方法

[3]this(..) 调用当前构造

package com;

//一类事物
//静态的属性和动态行为
public class Book {
String name;
int price;
String authors[];

//构造方法作用:初始化属性
public Book(String name, int price)
{
this.name = name;
this.price = price;
System.out.println(this);
}

public Book(String name, int price, String authors[]) {
// TODO Auto-generated constructor stub
this(name, price);  //调用当前构造
this.authors = authors;
}

public void printBookInfo()
{
//当前对象
setPrice(0.8f);
System.out.println(name + " " + price);
System.out.println(this);
}

private void setPrice(float sub)
{
price = (int)(price*sub);
}
}
package com;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
Book book = new Book("think in java", 100);
book.printBookInfo();
System.out.println(book);

Book book_02 = new Book("head first in java", 99);
book_02.printBookInfo();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: