Java TA - Computer Engineering, Sharif University of Technology

Download Report

Transcript Java TA - Computer Engineering, Sharif University of Technology

TA Session 4
Advanced Programing TA Session,
Sharif University of Technology
Advanced
Programming
1
Constructors
• Can constructors call other constructors?
class A {
int x;
A() {
// How can I construct with A(10) here?
}
A(int x) {
this.x = x;
}
public static void main(String[] args) {
A a1 = new A();
A a2 = new A(1);
System.out.println(a1.x + " " + a2.x);
}
}
Advanced Programing TA Session,
Sharif University of Technology
A.java
2
Constructors
• Can constructors call other constructors?
class A {
int x;
A() {
this(10);
}
A(int x) {
this.x = x;
}
public static void main(String[] args) {
A a1 = new A();
A a2 = new A(1);
System.out.println(a1.x + " " + a2.x);
}
}
Advanced Programing TA Session,
Sharif University of Technology
A.java
3
Constructors
• What is the output of running class B?
class A {
A() {
System.out.print("A");
}
}
B.java
class B extends A {
B() {
System.out.print("B");
}
public static void main(String[] args) {
A a = new A();
B b = new B();
}
}
• The output is “AAB”
Advanced Programing TA Session,
Sharif University of Technology
A.java
4
Constructors
• What is the output of running class B?
class A {
A(int x) {
System.out.println("A “ + x);
}
}
B.java
B.java:2: cannot find symbol
symbol : constructor A()
location: class A
B() {
^
1 error
class B extends A {
B() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new A(1);
B b = new B();
}
}
Advanced Programing TA Session,
Sharif University of Technology
A.java
5
Solution
• What is the output of running class B?
class A {
A(int x) {
System.out.println("A “ + x);
}
}
B.java
class B extends A {
B() {
super(1);
System.out.println("B");
}
public static void main(String[] args) {
A a = new A(1);
B b = new B();
}
}
Advanced Programing TA Session,
Sharif University of Technology
A.java
6
7
Advanced Programing TA Session,
Sharif University of Technology
8
Advanced Programing TA Session,
Sharif University of Technology
9
Advanced Programing TA Session,
Sharif University of Technology
10
Advanced Programing TA Session,
Sharif University of Technology
Advanced Programing TA Session,
Sharif University of Technology
class Clazz {
? int compute (int i) {
return 0;
}
}
11
class Shape{
};
class Ellipse extends Shape{
int r = 10 ;
public Ellipse(int rd){
r = rd ;
printR() ;
}
public void printR(){
System.out.println(r);
}
};
class Circle extends Ellipse{
public Circle(){
super(25);
r = 20 ;
printR();
}
public void printR(){
System.out.println(r);
}
};
Advanced Programing TA Session,
Sharif University of Technology
int r = 5 ;
public Shape(){
printR();
}
public void printR(){
System.out.println(r);
}
public static void main(String[] params){
Shape s = new Circle();
}
12
13
Advanced Programing TA Session,
Sharif University of Technology
14
Advanced Programing TA Session,
Sharif University of Technology
‫درستی و یا نادرستی هر یک از عبارات زیر را مشخص کرده و دلیل خود را نیز برای این امر ذکر کنید‪.‬‬
‫‪Advanced Programing TA Session,‬‬
‫‪Sharif University of Technology‬‬
‫‪15‬‬
‫الف) در زبان جاوا‪ ،‬تنها در زمان ساختن اشیا بر روی انها کنترل داریم و در زمان از بین بردن اشیا‬
‫کنترلی روی انها نداریم‪.‬‬
‫ب) توابع پدر یک کالس که قابل دسترسی در ان کالس نیستند‪ ،‬قابل ‪ Override‬شدن نیستند‪.‬‬
‫ج) هر کالس باید تمامی توابع موجود در ‪interface‬های خود را (در صورتی که یک یا چند‬
‫‪ interface‬را استفاده کرده باشد) پیادهسازی کند‪.‬‬
‫د) هر دادهای را که میتوان توسط ‪PrintWriter‬در خروجی نوشت‪ ،‬میتوان توسط‬
‫‪ OutputStream‬هم ان را در خروجی تولید کرد‪.‬‬
class Dady extends GrandPa {
int t;
static {
System.out.println("1");
}
Dady(){
System.out.println(t);
}
public void callMe(){
System.out.println(t++);
}
}
class GrandPa {
static {
System.out.println("2");
}
int t;
GrandPa (){
callMe();
t = 2;
}
protected void callMe(){
System.out.println(t);
}
public static void main(String[]
args){
GrandPa p = new Dady();
}
}
Advanced Programing TA Session,
Sharif University of Technology
.‫خروجی برنامهی زیر را به صورت کامل بنویسید‬
16
interface Comparator {
// return 1 if obj1 > obj2
// return 0 if obj2 == obj1
// return -1 if obj2 > obj1
int compare(Object
obj1, Object obj2);
}
interface Sorter{
Object[] sort(Object[]
objArray);
}
Advanced Programing TA Session,
Sharif University of Technology
‫ ای برای مقایسه اشیا با یکدیگر به نام‬interface
interface ‫ کالسی از این‬.‫ داده شده است‬comparator
.‫پیادهسازی کنید که بتوان با آن دو رشته متنی را مقایسه کرد‬
‫ ای دیگر نیز برای مرتب کردن اشیا داده شده‬interface
‫ یک مرتب ساز برای‬interface ‫ با استفاده از این‬.‫است‬
)‫ نمره‬4( .‫ ها پیاده سازی کنید‬String ‫آرایهای از‬
17
‫زیر را به صورتی پیادهسازی کنید که دارای ‪interface‬‬
‫خصوصیات زیر باشد‪ 6( .‬نمره)‬
‫‪Advanced Programing TA Session,‬‬
‫‪Sharif University of Technology‬‬
‫‪18‬‬
‫‪ .1‬این پیادهسازی‪ ،‬پیادهسازی یک درخت‬
‫با درجه نامشخص است که در گره آن‬
‫یک مقدار دادهای نگاهداری میشود‪.‬‬
‫‪ .2‬فرزندان هر گره را میتوان با‬
‫فراخوانی تابع ‪ getChildren‬بدست‬
‫آورد‪.‬‬
‫‪ .3‬با استفاده از تابع ‪writePreOrder‬‬
‫درخت باید به صورت پیشترتیب نوشته‬
‫شود‪.‬‬
‫{ ‪interface Tree‬‬
‫;)(‪Object getData‬‬
‫;)(‪Tree[] getChildren‬‬
‫;)(‪public void writePreOrder‬‬
‫;)(‪public Boolean isLeaf‬‬
‫}‬